使用ArrayList和iterator时的illegalStateException

Lum*_*mis 2 java android

我正在小行星射击游戏中创建和删除对象,并且仅在某些情况下它崩溃并且我收到此错误:

07-16 19:35:05.071:ERROR/AndroidRuntime(3553):致命异常:Thread-11

07-16 19:35:05.071:ERROR/AndroidRuntime(3553):java.lang.IllegalStateException

07-16 19:35:05.071:ERROR/AndroidRuntime(3553):at java.util.AbstractList $ SimpleListIterator.remove(AbstractList.java:69)

这是测试镜头和小行星之间碰撞的代码:

public void shotAstrCollision(){

    asterItr = asteroids.listIterator();

    while(asterItr.hasNext()){  
        aster = asterItr.next();
        shotItr = shots.listIterator();

        while(shotItr.hasNext()){   
            shot = shotItr.next();
            float shotToAst = (float) Math.sqrt((aster.x + astW/2 - shot.x)*(aster.x + astW/2 - shot.x) + (aster.y + astH/2 - shot.y)*(aster.y + astH/2 - shot.y));
            if (shotToAst < astW/2){
                //asteroid is shot
                aster.power -= shot.power;
                shotItr.remove();
                shotCount--;
                createExplosion(aster.x + astW/2, aster.y + astH/2);
                SoundManager.playSound(1, 1);
                if (aster.power <= 0) {
                    asterItr.remove();
                    astCount--; 
                }else{
                    aster.shotColor = ASTEROID_SHOT_PAINT_FRAMES;
                }
            }   
        }   
    }

}
Run Code Online (Sandbox Code Playgroud)

你知道在哪里寻找这个错误的可能原因吗?

Rya*_*art 9

射击小行星后,你需要突破内循环,在那里迭代射击.你的代码发现两个不同的镜头击中了同一个小行星并试图移除相同的小行星两次.这也可能表明您的碰撞检测存在问题,顺便说一句.