#box2d
#box2d
Вопрос:
Body b;
while ((b=box2d.physics.PhysicssWorld.world.getBodyList().getNext())!=null) {
Shape shape;
while ((shape=b.getShapeList().getNext())!=null) {
Log.e("name","" b.getUserData().toString() " " shape " ");
opengl.saveMatrix();
Meshes.select(b.getUserData().toString())
.translate((b.getPosition().x)*RATIO, (b.getPosition().y)*RATIO)
.rotate((int) ((int) b.getAngle()* (180 / Math.PI)), 0, 0, 1)
.draw(shape, 1,1,1);
opengl.loadMatrix();
}
}
Я хотел бы получить форму моих тел, но я ничего не могу получить, только null.. почему?
никогда не запускайте эту строку: Log.e(«name»,»» b.getUserData().toString() » » shape «»);
таким образом, shape=b.getShapeList().GetNext()) всегда имеет значение null…
Ответ №1:
Я сам только начинаю работать с Box2D. Насколько я понимаю библиотеку, основным средством получения форм тел является использование их приспособлений. Из устройства вы получаете указатель b2Shape, но, поскольку его методы являются виртуальными, вам, вероятно, потребуется преобразовать его в указатель b2PolygonShape / b2CircleShape, чтобы он был полезен. Вот некоторый код в этих строках:
void DoStuffWithShapes(b2World *World)
{
b2Body * B = World->GetBodyList();
while(B != NULL)
{
b2Fixture* F = B->GetFixtureList();
while(F != NULL)
{
switch (F->GetType())
{
case b2Shape::e_circle:
{
b2CircleShape* circle = (b2CircleShape*) F->GetShape();
/* Do stuff with a circle shape */
}
break;
case b2Shape::e_polygon:
{
b2PolygonShape* poly = (b2PolygonShape*) F->GetShape();
/* Do stuff with a polygon shape */
}
break;
}
F = F->GetNext();
}
B = B->GetNext();
}
}
Некоторые другие моменты, на которые следует обратить внимание: функция .GetNext() b2Body возвращает указатель — это реализация связанного списка. То же самое верно для b2Fixture::GetNext(). В вашем коде есть некоторые незнакомые (для меня) элементы, поэтому я не могу сказать наверняка, но это может сработать нормально, если вы просто пройдете и убедитесь, что ваши переменные совпадают с типами возвращаемых функций Box2D.