Java 当敌人重叠时,一颗子弹只杀死一个敌人

Java 当敌人重叠时,一颗子弹只杀死一个敌人,java,iterator,libgdx,collision,indexoutofboundsexception,Java,Iterator,Libgdx,Collision,Indexoutofboundsexception,我正在用LibGDX制作一个射击游戏。我的代码在一颗子弹击中一个敌人时有效。当多个敌人堆叠在一起,一颗子弹的碰撞盒击中多个敌人碰撞盒时,游戏崩溃,线程LWJGL应用程序java.lang.ArrayIndexOutOfBoundsException中出现异常:-1 如果我错了,请纠正我,但我认为这是因为迭代器尝试从bullet数组中移除的对象数量与在碰撞中被杀死的敌人数量相同,并且虽然只有一个bullet(例如,杀死三个敌人),但bullet数组索引低于零,这会导致异常 我的问题是:我如何修改循

我正在用LibGDX制作一个射击游戏。我的代码在一颗子弹击中一个敌人时有效。当多个敌人堆叠在一起,一颗子弹的碰撞盒击中多个敌人碰撞盒时,游戏崩溃,线程LWJGL应用程序java.lang.ArrayIndexOutOfBoundsException中出现异常:-1

如果我错了,请纠正我,但我认为这是因为迭代器尝试从bullet数组中移除的对象数量与在碰撞中被杀死的敌人数量相同,并且虽然只有一个bullet(例如,杀死三个敌人),但bullet数组索引低于零,这会导致异常

我的问题是:我如何修改循环/代码,使一个敌人死于一颗子弹,即使有许多敌人堆积在一起,一颗子弹同时击中多个敌人。多谢各位

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

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

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

嗯,但确实如此。再次感谢。我先在循环中添加了一个小计时器,暂时解决了这个问题,但到目前为止,这是一个更微妙、更有效的解决方案。再次感谢。我先在循环中添加了一个小计时器,暂时修复了这个问题,但到目前为止,这是一个更微妙、更有效的解决方案。