【问题标题】:I want to distinguish b2Body我要区分 b2Body
【发布时间】:2012-11-03 13:55:02
【问题描述】:

我在 World 中有很多带有 Box2d.(B2Body) 的身体。我想区分这个身体。

例如我有

b2Body *ball;
b2Body *person1;
b2Body *person2;
b2Body *Person3;

我想打哪个人?

这个 b2body 有 idname 或其他区分吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 2014-06-04
        • 2022-12-04
        • 1970-01-01
        相关资源
        最近更新 更多