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