我想区分b2Body

时间:2012-11-03 13:55:03

标签: objective-c cocos2d-iphone objective-c++ game-physics box2d-iphone

我在Box2d的World中有很多机构。(B2Body)。我想区分这个机构。

例如我有

b2Body *ball;
b2Body *person1;
b2Body *person2;
b2Body *Person3;
那个我想要击球的人?

这个b2体有 id 名称或其他区别的东西?

2 个答案:

答案 0 :(得分:2)

您可以使用==运算符,例如:

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
    }
}

答案 1 :(得分:0)

谢谢@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"];


    }
}