2011-07-04 18 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

ウェルカムバディー......... –

1

ユーザーデータにいくつかの識別子を入れます。例:

struct MyUserData 
{ 
    int myUniqueId; 
}; 

ボディを作成すると、それぞれに固有の番号を付けて、どのボディが衝突しているのかを理解できるようになります。

関連する問題