3
こんにちは私はBox2DとSFMLを統合しようとしています。私のクラスは本体のポインタを取ります。私はフィクスチャのすべての点を取得するために使う必要があります。box2DのBody *からフィクスチャのShapeの点を取得するにはどうすればいいですか?
これらのポイントはどのように取得できますか?
こんにちは私はBox2DとSFMLを統合しようとしています。私のクラスは本体のポインタを取ります。私はフィクスチャのすべての点を取得するために使う必要があります。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'はCのfalseと同じNULLにエバリュートします。GetShape()は汎用のb2Shape *ポインタを返すだけなので、特定の形状については何も知らない。 – iforce2d