Как получить очки Shape от прибора Body * в box2D? - PullRequest
3 голосов
/ 08 июля 2011

Эй, я пытаюсь интегрировать Box2D и SFML, и мой класс использует указатель Body, который мне нужно использовать, чтобы получить все точки прибора, чтобы я мог сформировать графическое представление тела из них.

Как я могу получить эти очки?

1 Ответ

7 голосов
/ 08 июля 2011

Вы можете перебирать приборы в теле следующим образом:

for (b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext()) 
{
    ....
}

После того, как у вас есть прибор, вам нужно проверить, какая у него форма, а затем привести его к этому типу, чтобы получить доступ кданные формы:

b2Shape::Type shapeType = fixture->GetType();
if ( shapeType == b2Shape::e_circle )
{
    b2CircleShape* circleShape = (b2CircleShape*)fixture->GetShape();
    ...
}
else if ( shapeType == b2Shape::e_polygon )
{
    b2PolygonShape* polygonShape = (b2PolygonShape*)fixture->GetShape();
    ....
}

Используйте GetVertexCount () и GetVertex (), чтобы получить вершины из многоугольника.

Обратите внимание, что позиции вершин, сохраненные в осветителе, находятся в координатах тела (относительнотело, к которому прикреплен прибор).Чтобы получить местоположения в мировых координатах, вам нужно умножить на преобразование тела:

b2Vec2 worldPos = body->GetWorldPoint( localPos );
...