怎么知道哪个身体碰撞?

时间:2011-07-04 15:19:40

标签: xcode cocos2d-iphone box2d

我正在使用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 个答案:

答案 0 :(得分:2)

创建像这样的正文集用户数据

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 :(得分:1)

将一些标识符放入用户数据中。例如:

struct MyUserData
{
    int myUniqueId;
};

创建实体时,会为每个实体添加一些唯一的编号,然后您就能够了解哪个实体正在碰撞。