2011-07-08 16 views

回答

7

您可以在灯具迭代在这样的身体:

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); 
+0

非常感谢。现在完美运作。然而,我确实有一些**问题**(我喜欢理解事物背后的推理,所以我可以在以后应用它):当我尝试去nextFixture时,如果没有它返回一个数字认为是假的?为什么我必须要CAST(我从未想过)才能获得顶点? – Griffin

+0

说,你可以看看这个问题?:http://stackoverflow.com/questions/6621196/how-to-set-centers-of-shapes-fixtures-bodies-in-box2d – Griffin

+0

夹具列表是一个链表,因此列表中的每个灯具都有一个指向列表中下一个灯具的指针。对于列表中的最后一个灯具,下一个指针将为NULL,因此条件'f'将会变为NULL,与C中的false相同。您需要投射,因为GetShape()仅返回通用b2Shape *指针,它不知道具体形状的任何内容。 – iforce2d

相关问题