box2dの一部のオブジェクトの物理的な衝突を無視する方法


8

これはばかげているように聞こえるかもしれませんが、いくつかのオブジェクトは物理学に従い、他のオブジェクトは互いに衝突しないようにします。

私はそれらの位置を排他的に設定することによってそれらを達成しようとしました。しかし、それはすべての物理学を無視します。

私がやろうとしていることは可能ですか?


あなたが何を達成したいのかわかりませんが、運動学的なボディも役立つかもしれません。
ThatOneGuy 2013年

回答:


11

Box2Dマニュアルの衝突フィルタリングについて読んでください:

衝突フィルタリングを使用すると、器具間の衝突を防ぐことができます。たとえば、自転車に乗るキャラクターを作るとします。自転車を地形に衝突させ、キャラクターを地形に衝突させたいが、キャラクターを自転車に衝突させたくない(それらはオーバーラップする必要があるため)。Box2Dは、カテゴリとグループを使用したこのような衝突フィルタリングをサポートしています。

Box2Dは16の衝突カテゴリをサポートします。各器具について、それが属するカテゴリを指定できます。このフィクスチャが衝突する可能性のある他のカテゴリも指定します。たとえば、マルチプレーヤーゲームで、すべてのプレーヤーが互いに衝突せず、モンスターが互いに衝突しないように指定できますが、プレーヤーとモンスターは衝突する必要があります。

マニュアルへのリンクはこちら。(フィルタリングの検索)。


2

互いに衝突してはならない2種類のオブジェクトがある場合、次のように機能します。

var kindA = -1;
var kindB = -2;

var bodyDef = new b2BodyDef();
var body = world.CreateBody(bodyDef);
var fixtureDef = new b2FixtureDef();
fixtureDef.shape = new b2Shape();
fixtureDef.filter.groupIndex =
    entity instanceof EntityA
        ? kindA
        : kindB;
body.CreateFixture(fixture);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.