我正在用java制作基本游戏.在游戏中你是一个障碍,通过使用键(向上,向下等)你应该射击敌人.这也是一个块.我有两个对象之间的工作碰撞,它的工作原理.然而,当子弹击中敌人时,它应该消失.当所有敌人被"杀死"时,你就赢了.这基本上是我到目前为止所得到的.
ArrayList<Enemy> enemy;
ArrayList<Bullet> bullets;
[...]
public void collision (){
for(Bullet b : bullets){
Rectangle r1 = b.getBounds();
for(Enemy e : enemy){
Rectangle r2 = e.getBounds();
if(r1.intersects(r2)){
enemy.remove(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
敌人是由.txt产生的
else if(mark == 'E'){
enemies.add(new Enemy(x * 20 + 10, y * 20 + 35, 40));
}
Run Code Online (Sandbox Code Playgroud)
因此当你用子弹击中敌人时,我首先得到一个java.util.ConcurrentModificationException for(Enemy e : enemy){
但是,如果我按特定顺序击中敌人,我可以删除除1个敌人以外的所有敌人.然后发生错误.碰撞方法放在"游戏循环"中.
除非通过列表迭代器本身完成删除,否则无法从正在迭代的列表中删除.
将代码更改为显式迭代(而不是使用循环的"for each"形式for),为敌人创建迭代器,并调用enemyIterator.remove()以避免此问题:
ListIterator<Enemy> enemyIterator = enemy.listIterator();
while (enemyIterator.hasNext()) {
Rectangle r2 = enemyIterator.next().getBounds();
if(r1.intersects(r2)) {
enemyIterator.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |