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