1

我在Box2d世界有很多身體(B2Body)。我想區分這個機構。我想分辨b2Body

比如我有

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

,我想打的球的人?

這b2body有ID或其他東西的區別?

回答

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


    } 
}