JBox2d - world.getBodyList()进入无限循环

时间:2012-05-09 11:15:09

标签: java android box2d jbox2d

我正在尝试创建一个可以将JBox2d世界的对象绘制到画布上的类。

在更新时,我打电话给

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 )  );
    }

}

然而它似乎进入无限循环,后退按钮不起作用,然后它说“没有响应”并提供强制关闭。

在这种情况下,任何想法是什么是在身体中循环的正确方法?

谢谢!

2 个答案:

答案 0 :(得分:6)

正如我的评论所述 - 循环应该如下:

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

答案 1 :(得分: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();
    }       
}