我在 World 中有很多带有 Box2d.(B2Body) 的尸体。我想区分这个身体。
例如我有
b2Body *ball;
b2Body *person1;
b2Body *person2;
b2Body *Person3;
我要打哪个人的球?
这个 b2body 有id、name或其他东西来区分吗?
我在 World 中有很多带有 Box2d.(B2Body) 的尸体。我想区分这个身体。
例如我有
b2Body *ball;
b2Body *person1;
b2Body *person2;
b2Body *Person3;
我要打哪个人的球?
这个 b2body 有id、name或其他东西来区分吗?
您可以只使用==
运算符,例如:
void ContactListener::PostSolve(b2Contact* contact, b2ContactImpulse* impulse) {
b2Body *bodyA = contact->GetFixtureA()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();
if ((bodyA == ball && bodyB == person1) || (bodyB == ball && bodyA == person1)) {
// do something
}
}
或者您也可以使用b2Body
用户数据(但您需要确保为所有主体分配同一类的用户数据:
void ContactListener::PostSolve(b2Contact* contact, b2ContactImpulse* impulse) {
BodyUserData *bodyA_data = (BodyUserData *)contact->GetFixtureA()->GetBody()->GetUserData();
BodyUserData *bodyB_data = (BodyUserData *)contact->GetFixtureB()->GetBody()->GetUserData();
if ((bodyA_data.type == TYPE_BALL && bodyB_data == TYPE_PERSON1) || (bodyB_data.type == TYPE_BALL && bodyA_data == TYPE_PERSON1)) {
// do something
}
}
谢谢@Lukman。这是正确的。我在我的代码中添加了
这段代码->>>>>
- (void)beginContact:(b2Contact *)contact {
b2Body *bodyB = contact->GetFixtureB()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();
if ((bodyA == ball && bodyB == person1) || (bodyB == ball && bodyA == person1))
{
// do something
[[SimpleAudioEngine sharedEngine] playEffect:@"whine.wav"];
}
}