2016-06-20 6 views
0

この関数は、爆発がボックスに当たったかどうかをチェックし、最初のボックスでキャンセルする必要があります。Java - ループは実行されますが、ヘッダーは条件に合わない

たとえば、bsp.getBomb()。getStrength()は現在2です。ボックスがヒットするとi = 3ですが、条件が満たされなくてももう一度ループが実行されます。なぜですか?ループにbreakを追加

public void detectBomb(BombSpritePair bsp) { 
    for(int i = 0; i <= bsp.getBomb().getStrength(); i++) { 
     if(bd.detect(bsp.getBomb().getX(), bsp.getBomb().getY()+i)) {   
      Sprite sprite = new Sprite(new Texture("gras.png")); 
      sprite.setPosition(bsp.getBomb().getX()*16, (bsp.getBomb().getY()+i)*16); 
     // i = bsp.getBomb().getStrength()+1; 
      sprites.add(sprite); 
      System.out.println("RIP"+i); 
      System.out.println(bsp.getBomb().getStrength()); 
      break; 
     } 
    } 
} 
+0

正しい '<'の代わりに '<='を使用しているためです。 – Kayaman

+0

これは問題ではありません... 3 <= 2は動作しません – Joey

+0

は 'bsp.getBomb()。getStrength()'定数です。ループの実行中にループ境界を変更することは、しばしば悪いことです。 ** Plus **では、ループの本体内で 'i'を変更しています。また良いことではありません! – cxw

答えて

1

試してください:あなたはdetectBombメソッドを複数回呼び出す場合

public void detectBomb(BombSpritePair bsp) { 
    for(int i = 0; i <= bsp.getBomb().getStrength(); i++) { 
     if(bd.detect(bsp.getBomb().getX(), bsp.getBomb().getY() + i)) {   
      Sprite sprite = new Sprite(new Texture("gras.png")); 
      sprite.setPosition(bsp.getBomb().getX()*16, (bsp.getBomb().getY()+i)*16); 
      sprites.add(sprite); 
      System.out.println("RIP"+i); 
      System.out.println(bsp.getBomb().getStrength()); 
      break; 
     } 
    } 
} 

あなたは重複print文を見ていてもよいです。このメソッドの先頭にブレークポイントまたは印刷ステートメントを置くと、問題の内容を特定するのに役立ちます。

心に留めておくべきもう一つは、あなたがスプライトのためのメソッドが実行されますたびに新しいテクスチャを作成しているということである - それは一度だけテクスチャをインスタンス化し、それを必要とするすべての後続のSpriteインスタンスとそれを共有するのが賢明だろう。

+0

私はすでにブレークしています:/ – Joey

+0

'detectBomb'を複数回呼びますか? – waffre

+0

私はそれをレンダリングメソッドで呼び出すので、そうです – Joey

関連する問題