java - LibGDX 当敌人重叠时让一颗子弹只杀死一个敌人

标签 java iterator libgdx collision indexoutofboundsexception

我正在使用 LibGDX 制作射击游戏。当一颗子弹击中一个敌人时,我的代码有效。堆叠多个敌人时,子弹的碰撞盒击中多个敌人的碰撞盒时,游戏崩溃并出现Exception in thread "LWJGL Application"java.lang.ArrayIndexOutOfBoundsException: -1

如果我错了请纠正我,但我认为发生这种情况是因为迭代器试图从子弹数组中删除与在那次碰撞中被杀死的敌人一样多的对象,而只有一颗子弹例如杀死了三个敌人项目符号数组索引低于零,这会导致异常。

我的问题是:如何修改循环/代码,使一个敌人死于一颗子弹,即使有许多敌人“堆叠”并且一颗子弹一次击中多个敌人。谢谢。

bIter = bullets.iterator();
        while(bIter.hasNext()){
            b = bIter.next();           
            mIter = monsters.iterator();
            while(mIter.hasNext()){
                m = mIter.next();

                if(m.getBounds().overlaps(b.getBounds())){

                    mIter.remove();
                    bIter.remove();

                }
            }
        }

最佳答案

增加休息时间对您有帮助吗?一旦一颗子弹击中敌人,它就会停止循环。两者都被移除(但只有一个敌人),我们从下一颗子弹开始。

bIter = bullets.iterator();
while(bIter.hasNext()){
    b = bIter.next();           
    mIter = monsters.iterator();
    while(mIter.hasNext()){
        m = mIter.next();
        if(m.getBounds().overlaps(b.getBounds())){
            mIter.remove();
            bIter.remove();
            break; // <-- this is new
        }
    }
}

关于java - LibGDX 当敌人重叠时让一颗子弹只杀死一个敌人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512369/

相关文章:

java - LibGDX - 如何添加背景图片

java - 在游戏 View 下添加 admob

java - LogCat 中的 FatalException 错误

java - 接口(interface)和继承如何影响Java中类和对象之间的关系?

java - 在 Java 中高效地读取/写入键/值对到文件

c++ - 为什么 C++11 或 C++14 中没有位置迭代器?

java - 为什么 `weakly consistent iterator`只反射(reflect)修改和删除变化,而不反射(reflect)插入变化

java - RandomIterator 不产生随机输出

java - LibGDX:Eclipse导入Gradle 'CreateProcess error = 5'

java - 在列中搜索数据时,使用 Selenium 在 Junit 中导致错误的循环