Как узнать, какое тело сталкивается? - PullRequest
2 голосов
/ 04 июля 2011

Я использую 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!");
    }

спасибо большое.

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

при создании тела набора пользовательских данных, как это

CCSprite * red = [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

        }


    }
1 голос
/ 04 июля 2011

Поместите некоторый идентификатор в данные пользователя. Например:

struct MyUserData
{
    int myUniqueId;
};

При создании тел прикрепите к каждому какое-то уникальное число, и тогда вы сможете понять, какое тело сталкивалось.

...