有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在发生冲突时从ArrayList中删除对象

我正在用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);

            }

        }

    }

敌人是由一只母熊繁殖的。txt

else if(mark == 'E'){
    enemies.add(new Enemy(x * 20 + 10, y * 20 + 35, 40));
}

所以当你用子弹击中敌人时,我会得到一个爪哇。util。ConcurrentModificationException首先在for(Enemy e : enemy){

但是,如果我按特定顺序击中敌人,我可以删除除1个敌人以外的所有敌人。然后错误就出现了。碰撞方法被放置在“gameloop”中


共 (1) 个答案

  1. # 1 楼答案

    不能从正在迭代的列表中删除,除非删除是通过列表迭代器本身完成的

    将代码更改为显式迭代(而不是使用for循环的“for each”形式),为敌人创建一个迭代器,并调用enemyIterator.remove()以避免此问题:

    ListIterator<Enemy> enemyIterator = enemy.listIterator();
    while (enemyIterator.hasNext()) {
        Rectangle r2 = enemyIterator.next().getBounds();
        if(r1.intersects(r2)) {
            enemyIterator.remove();
        }
    }