3
嘿我试图整合Box2D和SFML,并且我的类需要一个Body指针,我需要使用它来获取灯具的所有点,以便我可以从它们中形成身体的图形表示。如何从box2D中的Body *获取灯具的Shape形状的点?
我该如何得到这些要点?
嘿我试图整合Box2D和SFML,并且我的类需要一个Body指针,我需要使用它来获取灯具的所有点,以便我可以从它们中形成身体的图形表示。如何从box2D中的Body *获取灯具的Shape形状的点?
我该如何得到这些要点?
您可以在灯具迭代在这样的身体:
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);
非常感谢。现在完美运作。然而,我确实有一些**问题**(我喜欢理解事物背后的推理,所以我可以在以后应用它):当我尝试去nextFixture时,如果没有它返回一个数字认为是假的?为什么我必须要CAST(我从未想过)才能获得顶点? – Griffin
说,你可以看看这个问题?:http://stackoverflow.com/questions/6621196/how-to-set-centers-of-shapes-fixtures-bodies-in-box2d – Griffin
夹具列表是一个链表,因此列表中的每个灯具都有一个指向列表中下一个灯具的指针。对于列表中的最后一个灯具,下一个指针将为NULL,因此条件'f'将会变为NULL,与C中的false相同。您需要投射,因为GetShape()仅返回通用b2Shape *指针,它不知道具体形状的任何内容。 – iforce2d