当前,我们正在开发射击游戏。我们有子弹和敌人的课程。我们还创建了两个可以在其中找到这些元素的数组列表。每当子弹击中敌人时,该敌人就应该消失。相反,我们收到此错误。
void hit()
{
for(int i = 0; i < Bullet.size(); i++)
{
Bullet bul = (Bullet) Bullet.get(i);
Enemy enm = (Enemy)enemies.get(i);
if(bul.x < enm.x + enm.l && bul.x > enm.x - enm.l && enm.y<bul.y)
{
enm.health -= 1;
println("Pew");
if(enm.health <= 0)
{
enm = null;
enemies.remove(i);
}
}
}
}
答案 0 :(得分:1)
这里有些事情可能会出错。首先,for循环通过Bullet ArrayList,但是,您也使用该索引来修改Enemy ArrayList。因此,如果bul.size()> enm.size()“即,子弹数组大于敌人数组”,这就是导致IndexOutOfBoundsException的原因。
此外,如果您要检查每个子弹与每个敌人的交集,则需要嵌套for循环。目前,您只是在检查同一索引处的每个子弹和敌人是否相交。
您可以使用以下方法解决此问题:
for(int i = 0; i < bul.size(); i++){
for(int j = 0; j < enm.size(); j++){
//if bullet is intersecting enemy
//do something
}
}