衝突を識別するためにb2ContactListenerクラスを使用しました。他のすべての身体衝突の識別は成功します。他のb2bodyと地面の衝突を見つけるにはどうすればよいですか?
質問する
1592 次
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 に答える