簡體   English   中英

使用 ArrayList 和迭代器時出現非法狀態異常

[英]illegalStateException when using ArrayList and iterator

我在小行星射擊游戲中創建和刪除對象,僅在某些情況下它會崩潰並且我收到此錯誤:

07-16 19:35:05.071:錯誤/AndroidRuntime(3553):致命異常:線程 11

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

07-16 19:35:05.071: 錯誤/AndroidRuntime(3553): 在 java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:6)

這是測試鏡頭和小行星之間碰撞的代碼:

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;
                }
            }   
        }   
    }

}

您知道在哪里尋找導致此錯誤的可能原因嗎?

小行星被擊中后,您需要跳出內循環,在其中迭代鏡頭。 您的代碼發現兩個不同的鏡頭擊中了同一個小行星並試圖移除同一個小行星兩次。 順便說一句,這也可能表明您的碰撞檢測存在問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM