2011-07-16 7 views
2

私が作成し、小惑星のシューティングゲームで、唯一それがクラッシュするいくつかの場面でオブジェクトを削除し、私はこのエラーを取得しています使用している場合:これは、ショット間の衝突をテストコードがあるIllegalStateExceptionがArrayListのイテレータ

07-16 19:35:05.071: ERROR/AndroidRuntime(3553): FATAL EXCEPTION: 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; 
       } 
      } 
     } 
    } 

} 

このエラーの原因を調べる場所はありますか?

+0

'remove()'を2つの異なるイテレーター、 'shotItr'と後で' asterItr'に呼び出しています。 'IllegalStateException'をスローする行はどれですか? –

答えて

9

小惑星が撃墜された後、ショットを反復している内側のループから脱出する必要があります。あなたのコードでは、2つの異なるショットが同じ小惑星を襲い、同じ小惑星を2回削除しようとしています。これはまた、衝突検知の問題を指摘するかもしれません。

+0

まあ、ありがとうございました!新鮮な目のペアが常に役立ちます!小惑星が除去された後、私はショットループから脱出する必要があります。今夜私の頭には小惑星がたくさんあるに違いない...;) – Lumis

+0

恐ろしい答え。 –

関連する問題