在 ArrayList 中自行删除对象

Remove object by itself in ArrayList

我正在使用单线程游戏,在 Main class 我有 ArrayList 来包含用于攻击僵尸的 Bullet 对象。 游戏的每一帧我都会像这样循环:

ArrayList<Bullet> bulletList;
for (Bullet iBullet : bulletList) {
    iBullet.move();
    iBullet.attack(bulletList);
}

在项目符号class中,我写了

public void attack(ArrayList<Bullet> bulletList) {
    for (Zombies z : zombieList) {
        if ( hit condition ) {
            bulletList.remove(this); //problem here
            return;
        }
    }
}

我在第一个循环后出现空错误,似乎项目符号对象已成功从 ArrayList 中删除,并且还在 Main class 的循环中造成了一些混乱。

您可以使用 Iterator,更改您的 attack 方法以接受它作为参数:

Iterator<Bullet> iterator = bulletList.iterator();
while (iterator.hasNext()) {
    Bullet iBullet = iterator.next();
    iBullet.move();
    iBullet.attack(bulletList, iterator);
}

public void attack(ArrayList<Bullet> bulletList, Iterator<Bullet> iterator) {
    iterator.remove();
}

或者您可以将 attack 方法更改为 return 表示子弹是否击中的布尔值(而不是移除子弹),并使用中介绍的 removeIf() 方法Java 8:

for (Bullet iBullet : bulletList) {
    iBullet.move();
}
bulletList.removeIf(b -> b.attack());