LibGDX当敌人重叠时,制造一颗子弹只会杀死一个敌人

时间:2014-02-02 15:29:32

标签: java iterator libgdx collision indexoutofboundsexception

我正在用LibGDX做射手。当一颗子弹击中一个敌人时,我的代码就会起作用。当多个敌人被堆叠并且子弹的碰撞盒击中多个敌人的碰撞盒时,游戏崩溃与线程中的异常“LWJGL应用程序”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();

                }
            }
        }

1 个答案:

答案 0 :(得分:4)

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

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
        }
    }
}