b2contactlistener问题

时间:2012-03-07 03:09:28

标签: iphone cocos2d-iphone box2d box2d-iphone

我正在使用cocos2d和box2d制作iphone应用程序,我遇到了麻烦,我按照本教程了解如何使用b2ContactListener因为我的应用程序非常需要它... http://www.raywenderlich.com/505/how-to-create-a-simple-breakout-game-with-box2d-and-cocos2d-tutorial-part-22我正在尝试检测两个物体何时碰撞

对我来说,这是最困难的事情之一......不是说他在游戏中做了什么,而是如何使用b2contactlistener ...但是,我想在他的教程中使用他所做的我的代码

这是我更新我的tick方法所以它每次都会检查碰撞

-(void) update: (ccTime) dt
{
int32 velocityIterations = 8;
int32 positionIterations = 1;

// Instruct the world to perform a single step of simulation. It is
// generally best to keep the time step and iterations fixed.
world->Step(dt, velocityIterations, positionIterations);    


std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin(); 
    pos != _contactListener->_contacts.end(); ++pos) {
    MyContact contact = *pos;

    if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||
        (contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture)) {
        NSLog(@"Ball hit bottom!");
    }
}
}

但是,我不知道如何更改它以使用我的两个b2Bodies,eggBody和locations.platform ......

我相信我必须改变这几条线......

    if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||
        (contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture)) {
        NSLog(@"Ball hit bottom!");
    }

在哪里说_bottomFixture和_ballFixture我以为我会插入我的b2Bodies ...但现在我觉得_bottomFixture甚至不是b2body

:)任何帮助都会非常抱歉,如果我困惑任何人只是发布任何问题,我会澄清thankyou

1 个答案:

答案 0 :(得分:1)

_bottomFixture是一个b2Fixture对象。

通过

创建body的fixturedef时创建
 bottomBody->CreateFixture(&_fixturedef);

以上行返回b2Fixture。 所以你可以写

b2Fixture *_bottomFixture =  bottomBody->CreateFixture(&_fixturedef);

通常我们不会跟踪这个b2Fixture对象。但在碰撞检测中,我们需要使用它。