Проблемы с b2contactlistener - PullRequest
0 голосов
/ 07 марта 2012

Я делаю приложение для iphone с cocos2d и box2d, и у меня возникли проблемы. Я следовал этому уроку о том, как использовать b2ContactListener, потому что он мне очень нужен для моего приложения ... http://www.raywenderlich.com/505/how-to-create-a-simple-breakout-game-with-box2d-and-cocos2d-tutorial-part-22 Я пытаюсь обнаружить, когда два объекта сталкиваются

Мне было очень трудно понять ... не обязательно то, что он делает в игре, а то, как использовать b2contactlistener ... Однако я хочу использовать то, что он делал в этом уроке в мой код

так я обновил свой метод тиков, чтобы он каждый раз проверял наличие коллизий

-(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 и location.platform ...

Я считаю, что эти несколько строк я должен изменить ...

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

где написано _bottomFixture и _ballFixture Я думал, что подключу свои b2Bodies ... но теперь я чувствую, что _bottomFixture даже не b2body

:) любая помощь была бы очень кстати, извините, если я кого-то запутал, просто напишите какие-либо вопросы, и я уточню, спасибо

1 Ответ

1 голос
/ 07 марта 2012

_bottomFixture является объектом b2Fixture.

Он создается при создании fixturedef для тела с помощью

 bottomBody->CreateFixture(&_fixturedef);

, указанная выше строка возвращает b2Fixture.так что вы можете написать

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

обычно мы не отслеживаем этот объект b2Fixture.Но при обнаружении столкновений нам нужно его использовать.

...