Простое действие Cocos2d Box2d при столкновении - PullRequest
0 голосов
/ 04 июня 2011

Я неделями искал учебник на основе OBJ-C о том, как вызывать метод, когда конкретное тело b2 сталкивается с чем-то другим (не со всем).

По сути, блок падает на землю каждый развторой.Это работает нормально, но когда он падает на землю или игрока, блок должен быть удален, и его части (другой объект) должны появиться.

Может кто-нибудь сказать мне, как это сделать?

Любая помощь будет горячей

Спасибо

Ответы [ 2 ]

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

Я думаю, что это то, что вам нужно .. Вам необходимо включить MycontactListener

-(void) checkForHit{

std::vector<b2Body *>toDestroy;

std::vector<MyContact>::iterator pos;

for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos) {

MyContact contact = *pos;

bodyA = contact.fixtureA->GetBody();

bodyB = contact.fixtureB->GetBody();

if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) {

spriteA = (CCSprite *) bodyA->GetUserData();

spriteB = (CCSprite *) bodyB->GetUserData();

//NSLog(@”sprite tag is  %d”,spriteA.tag);

if (spriteA.tag == 50)  {

if (std::find(toDestroy.begin(), toDestroy.end(), bodyB) == toDestroy.end()) {

toDestroy.push_back(bodyB);
}

}

std::vector<b2Body *>::iterator pos2;
for(pos2 = toDestroy.begin(); pos2 != toDestroy.end(); ++pos2) {
b2Body *body = *pos2;
if (body->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *) body->GetUserData();
[self removeChild:sprite cleanup:YES];
}
_world->DestroyBody(body);
}

или если вы не хотите использовать contact listener.you можете создать приспособление для заземления и тела, которое вы хотите уничтожить, и используйте следующий код, чтобы проверить, пересекается ли оно и уничтожить его ...

if((contact.fixtureA == groundFixture && contact.fixtureB == bodyFixture) ||
    (contact.fixtureA == bodyFixture&& contact.fixtureB == groundFixture ))
    {
    //destroy the body
    }
0 голосов
/ 03 июля 2011

Я понял, что, когда мой объект упадет на землю, я мог бы создать свою ОЧЕНЬ простую физику, создав начальную скорость, а затем увеличив ее в методе обновления на определенную величину.

Длястолкновения, все мои объекты помещаются в сетку шириной 48 точек, так что я могу просто обнаружить прямоугольное столкновение.

...