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

내가 년 이상에 아이폰 프로그래밍하지 않은,하지만 난 시체가 충돌 할 때의 콜백은, 좀 더 도움이 될 수 없습니다 죄송합니다, 나는 나의 오래된 게임의 소스 코드에 보일 것이 기억하지만, 나는 자바에서 일하고있다. –

답변

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

WELCOME BUDDY ......... –

1

사용자 데이터에 일부 식별자를 입력하십시오. 예 :

struct MyUserData 
{ 
    int myUniqueId; 
}; 

신체를 생성 할 때 각각에 고유 한 번호를 붙이면 충돌하는 신체를 이해할 수 있습니다.

관련 문제