0

衝突を識別するためにb2ContactListenerクラスを使用しました。他のすべての身体衝突の識別は成功します。他のb2bodyと地面の衝突を見つけるにはどうすればよいですか?

4

1 に答える 1

1

衝突は、ボディではなく、フィクスチャ間のbox2dで発生します。そのため、連絡先リスナーに次のようなコードが含まれている可能性があります

contact.fixtureA = contact->GetFixtureA();
contact.fixtureB = contact->GetFixtureB();

各ボディのユーザーデータとしてスプライトを使用している場合でも、フィクスチャのuserdataフィールドに必要なものを入力するオプションがあります。このようなものは非常に役立ちます:

fixtureUserData *fUd = new fixtureUserData();
fUd->tag = INT_IDENTIFYING_GROUND_FIXTURE;
// ...
b2FixtureDef groundBoxDef;
groundBoxDef.userData = fUd;

.hファイルで次のような構造体を定義した場合

struct fixtureUserData {
    int tag;
    // ...other properties
};

INT_IDENTIFYING_GROUND_FIXTUREは、列挙型の要素にすることもできます(衝突カテゴリごとにその型の要素が1つある場合があります)。これを行った場合は、次の手順を実行して、地面との衝突をテストできます。

fixtureUserData *fBUd = (fixtureUserData *)pdContact.fixtureB->GetUserData();
if (fBUd->tag == INT_IDENTIFYING_GROUND_FIXTURE){
    // react to collision
}
于 2012-07-30T12:04:10.040 に答える