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