2

私はbox2dが初めてです。box2d で新しいゲームを開始し、世界で 5 つのダイナミック ボディを作成しました。最初に、それらの間の衝突を防ぐ必要があります。そのため、すべてのボディのグループ インデックスを負に設定します。体に触れた後、その体との衝突を許可したい。グループ インデックスをリセットする方法。助けてください..

4

2 に答える 2

2

次のようなものを探しているようです

b2Body *body = world->GetBodyList();
b2Filter filter = body->GetFilterData();
filter.maskBits = filter.maskBits | THE_RELEVANT_CATEGORY_BITS;
body->SetFilterData(&filter);

ここでの考え方は、任意のオブジェクトのコリジョン フィルタリング データを取得し、ブール ロジックを使用してコリジョン データを maskBits フィールドに割り当て、次に SetFilterData を使用してその新しいコリジョン データをボディに適用できるということです。THE_RELEVANT_CATEGORY_BITS は、各衝突フィルタリング カテゴリが一意の 2 進整数で表される列挙型の要素である必要があります。

このhttp://www.iforce2d.net/b2dtut/collision-filteringの詳細については、box2D チュートリアルをご覧ください。

于 2012-07-01T15:20:34.243 に答える
1

ボディのフィクスチャが複数ある場合は、このコードのチャンクを使用できます

for (b2Fixture* fix = body->GetFixtureList(); fix; fix = fix->GetNext())
{
    b2Filter filter=  fix->GetFilterData();

    filter.groupIndex = 0;
    filter.categoryBits = 0x0004;
    filter.maskBits = 0x0002;
    fix->SetFilterData(filter);
}
于 2013-04-02T07:49:53.320 に答える