如何从 box2D 中的主体*获取灯具的形状点?

How to get a fixture's Shape's points from a Body* in box2D?

本文关键字:灯具 获取 主体 box2D      更新时间:2023-10-16

嘿,我正试图整合Box2D和SFML,我的类需要一个身体指针,我需要使用它来获得夹具的所有点,这样我就可以形成身体的图形表示。

我怎么得到这些点?

您可以像这样遍历body中的fixture:

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()从多边形形状中获取顶点。

注意,存储在夹具中的顶点位置是在实体坐标中(相对于夹具所附着的实体)。要获得世界坐标中的位置,您必须乘以body transform:

b2Vec2 worldPos = body->GetWorldPoint( localPos );