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

3
我正在尝试创建一个类,该类可以将我的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 )  );
    }

}

然而它似乎进入了一个无限循环,返回按钮不起作用,然后它会显示“未响应”并提供强制关闭。

有没有什么好的方法可以在这种情况下循环遍历主体部分?

谢谢!


3
应该是要写成 b = b.getNext() 吗?只是猜测。 - BeRecursive
看起来没问题! :) 我从 C++ 中拿了这段代码,不知怎么就没注意到这个地方。 :) 再次感谢! - Roger Travis
2
好的,我已经将它添加为答案,如果您想接受它的话! - BeRecursive
2个回答

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
这是一种方法。您可以通过世界物体列表访问不同的形状(多边形/圆形):
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();
    }       
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接