Я только начинаю с 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.