1

シーン内の別のボディと衝突するために、多くの頂点を持つボディを作成しています。これは で行われますがb2ChainShape、最初にそのチェーンの単一のエッジを作成してみました (v2vは座標変換方法です)。

b2Vec2 v1 = [U v2v:CGPointMake(0, 150)];
b2Vec2 v2 = [U v2v:CGPointMake(50, 150)];

b2EdgeShape shape;
shape.Set(v1, v2);

これは期待どおりに機能します。他のボディがこのエッジと衝突します。奇妙なことに、チェーン シェイプに同じ頂点を使用すると、衝突が発生しません。

b2Vec2 vertices[2];
vertices[0] = [U v2v:CGPointMake(0, 150)];
vertices[1] = [U v2v:CGPointMake(50, 150)];

b2ChainShape shape;
shape.CreateChain(vertices, 2);

理由はありますか?チェーンは異なる座標系を使用していますか?

4

1 に答える 1

0

Box2d マニュアルから引用した次の段落をお読みください。 http://www.box2d.org/manual.pdf

エッジ形状は線分です。これらは、ゲームの自由形式の静的環境の作成を支援するために提供されています。エッジ シェイプの主な制限は、円やポリゴンとは衝突できますが、それ自体とは衝突できないことです。Box2D で使用される衝突アルゴリズムでは、衝突する 2 つの形状のうち少なくとも 1 つにボリュームが必要です。エッジ シェイプにはボリュームがないため、エッジ間の衝突は発生しません。

于 2012-08-03T16:56:28.103 に答える