2011-07-08 18 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

相關問題