2012-05-09 10 views
3

JBox2dの世界のオブジェクトをキャンバスに描画するクラスを作ろうとしています。JBox2d - world.getBodyList()は無限ループに入ります

は、更新時に私は世界と世界のオブジェクトを順番になって、キャンバスにそれらを描画される描画クラスにキャンバスを、渡し

render.draw(canvas,world); 

への呼び出しを持っています。

public void draw(Canvas canvas, World world) 
{ 

    canvas.drawColor(0xFF6699FF); 

    for (Body b = world.getBodyList(); b!=null; b.getNext()) 
    { 
     Log.e("xy", String.valueOf(b.getPosition().x)+" "+String.valueOf(b.getPosition().y) ); 
    } 

} 

まだボタンが作動しないバック、無限ループに入っているようだ、「応答していない」と言うとforcecloseしています。

この場合、体内を循環する正しい方法は何ですか?

ありがとうございます!私のコメントで述べたように

+3

これはb = b.getNext()であると考えられますか?ワールドボディのリストから、異なる形状(多角形/円)にアクセスできますか?ちょうどここで推測する。 – BeRecursive

+0

正しいと思われます! :)私はこのコードをC++から取り、何とかこの瞬間に気付かなかった。 :) 再度、感謝します! –

+2

申し訳ありませんが、私はそれを受け入れる場合は答えとして追加しました! – BeRecursive

答えて

6

- 次のようにループは次のようになります。

for (Body b = world.getBodyList(); b!=null; b = b.getNext()) 
{ 
    Log.e("xy", String.valueOf(b.getPosition().x)+ " " + String.valueOf(b.getPosition().y)); 
} 
+0

ありがとう!これも私を助けました。 – Oskar

0

これはそれを行うための一つの方法です。

public void draw(Canvas canvas){ 
    Body body = world.getBodyList(); 
    while(body != null){ 
     Fixture fixture = body.getFixtureList(); 
     while(fixture != null){ 
      ShapeType type = fixture.getType(); 
      if(type == ShapeType.POLYGON){ 
       PolygonShape shape = (PolygonShape)fixture.getShape(); 
       // draw shape 
      }else if(type == ShapeType.CIRCLE){ 
       CircleShape shape = (CircleShape)fixture.getShape(); 
       // draw shape 
      } 
      fixture = fixture.getNext(); 
     } 
     body = body.getNext(); 
    }  
} 
関連する問題