15

次のように 3 つの長方形を結合して、Box2d (Cocos2d) で「U」字形を作成しようとしています: |_|

ここでは動きが必要ないため、ジョイントは正しい解決策ではないようです。そのため、中央のビットと側面の 2 つの固定具である本体を作成しました。次のように、両側を真ん中のビットに追加しました。

mainBody->CreateFixture(&leftFixtureDef);
mainBody->CreateFixture(&rightFixtureDef);

これは機能しますが、両方のサイド フィクスチャが本体の中央に追加されます。本体に対して固定具を配置する方法がわかりません。スプライト/ノードをフィクスチャに取り付けて位置を変更しても、違いはないようです。

何か案は?

どうもありがとう。

4

1 に答える 1

29

それは形の性質です。b2CircleShape のようなプロパティは見つかりませんでしたが、パラメーターがb2PolygonShapeありm_centroidます。これは、ボディに対する形状の中心座標です。形状の有効な位置を持つように指定します。

b2PolyganShape にはメソッドsetAsBox(w, h)がありますが、より複雑なメソッドもあります。

setAsBox(float32 width, float32 height, const b2Vec2 &center, float32 rotation)

この方法を使用するか、重心を手動で指定します。

これがU字型のコードです

b2BodyDef bDef;
bDef.type = b2_dynamicBody;
bDef.position = b2Vec2(0, 0);
b2Body *body = world_->CreateBody(&bDef);

b2PolygonShape shape;
const float32 density = 10;

shape.SetAsBox(1, 0.1);
body->CreateFixture(&shape, density);

shape.SetAsBox(0.1, 1, b2Vec2(-1 + 0.1, 1), 0);
body->CreateFixture(&shape, density);

shape.SetAsBox(0.1, 1, b2Vec2(1 - 0.1, 1), 0);
body->CreateFixture(&shape, density);
于 2011-01-16T18:16:50.140 に答える