2012-05-09 53 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(); 
    }  
}