在 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());
我正在使用单线程游戏,在 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());