2011-07-04 117 views
2

我正在使用cocos2d和box2d,與聯繫人偵聽器,並可以說我有一個身體可以擊中其他幾個身體,但他們每個人都打開聯繫偵聽器。 那麼我怎麼知道誰打誰?如何知道哪個身體碰撞?

我有這個在我的滴答聲:

for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos) 
{ 
    MyContact contact = *pos; 
    b2Body *bodyA=contact.fixtureA->GetBody(); 
    b2Body *bodyB=contact.fixtureB->GetBody(); 

    //check if collision between to bodies 
    if(bodyA->GetUserData() !=NULL && bodyB->GetUserData() !=NULL) //if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture)) 
    { 
     NSLog(@"Ball hit bottom!"); 
    } 

非常感謝。

+0

我沒有在一年多程序的iPhone,但我記得有是當身體發生碰撞的回調,對不起,我不能提供更多的幫助,我會看看我的老遊戲的源代碼,但我在做Java的工作。 –

回答

2

在創建體設置用戶數據這樣

CCSprite *紅色= [CCSprite spriteWithFile:@ 「red.png」];

red.tag=3; 

[self addChild:red]; 

b2BodyDef bd;

bd.type=b2_dynamicBody; 

bd.position.Set(w/PTM_RATIO,h/PTM_RATIO); 

bd.userData=red; 


for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos) 
{ 
    MyContact contact = *pos; 
    b2Body *bodyA=contact.fixtureA->GetBody(); 
    b2Body *bodyB=contact.fixtureB->GetBody(); 

    //check if collision between to bodies 
    if(bodyA->GetUserData() !=NULL && bodyB->GetUserData() !=NULL) //if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture)) 
    { 
     so here 


     CCSprite *actor = (CCSprite*)bodyA->GetUserData(); 


     if ([actor tag] == 3) { 
      //red box 

     } 


    } 
+0

非常感謝,效果很棒! – Curnelious

+0

歡迎來到BUDDY ......... –

1

將一些標識符放入用戶數據中。例如:

struct MyUserData 
{ 
    int myUniqueId; 
}; 

當創建機構給每個身體附加一些獨特的編號,然後您將能夠了解哪個身體碰撞。