Обнаружение столкновений между слоями в Cocos2d? - PullRequest
0 голосов
/ 20 мая 2011

Я делаю игру в Cocos2d.У меня есть враги, которые стреляют, и персонаж стреляет.Я создал отдельный слой для врагов (и их пуль) и отдельный слой для персонажа (и его пуль).Проблема в том, что я не знаю, как обнаружить столкновения между двумя слоями.Обратите внимание, у меня есть сцена в HelloWorldLayer, и каждый из вышеперечисленных слоев является дочерним по отношению к сцене.Любая помощь приветствуется.Спасибо!

Ответы [ 4 ]

4 голосов
/ 11 декабря 2012

Вам необходимо добавить следующие строки, если вы используете бурундуков

shape->collision_type  = kCollisionTypeParticle;  
cpSpaceAddCollisionHandler(space_, 
                           kCollisionTypeParticle, 
                           kCollisionTypeParticle, 
                           collisonDetect, 
                           NULL, 
                           NULL, 
                           NULL, 
                           self);

Здесь collisonDetect - это метод, который нам нужно зарегистрировать как:

cpBool collisonDetect(cpArbiter *arb, struct cpSpace *space, void *data) 
{
   <YOUR CLASS> *layer = (<YOUR CLASS> *)data;
   [layer collisonDetect:arb];
   return cpTrue;
}

Теперь здесь, здесь вы будете обрабатывать остальныекод

-(void)collisonDetect:(cpArbiter*)arb
{
   NSLog(@"COLLISION DETECTED");
}
2 голосов
/ 20 мая 2011


Вы можете обнаружить столкновение в Cocos2D , используя CGRectIntersectsRect .
Ваша идея относительно создания отдельных слоев для врагов и пуль может оказаться запутанной. В этом сценарии вы должны рассмотреть возможность перехода на один слой. Вы должны были взглянуть на Ray Wenderlich обнаружения столкновений. Если нет, взгляните на Простую игру Cocos2d .
Если вам нужна дополнительная помощь, дайте мне знать.

1 голос
/ 20 мая 2011

Почему бы не создать пули на противоположном слое от источника пуль, то есть слой A - это персонаж и пули противника, слой B - это враг и пули персонажа? Тогда ваше обнаружение столкновений будет на том же слое.

0 голосов
/ 20 мая 2011

Посмотрите на CGRectIntersectsRect .... Я не делал Cocos2D в течение ДЛИТЕЛЬНОГО времени, но я помню, как использовал Планировщик, чтобы регулярно вызывать метод, который обнаруживал бы коллизии, используя метод CGRectIntersectsRect ...

У меня было ограниченное количество спрайтов на экране, и на каждом проходе метода обнаружения столкновений я проверял бы, не пересекаются ли какие-либо из моих вражеских спрайтов с кадрами моего главного героя, используя CGRectIntersectsRect.

Вот как я это сделал:

Шаг 1: Реализуйте метод, который использует CGRectIntersectsRect , чтобы проверить, касаются ли рамки спрайта. Это может выглядеть примерно так:

- (BOOL)detectCollision
{
    CGRect frame1 = someframe;
    CGRect frame2 = anotherframe;

    if(CGRectIntersectsRect(frame1, frame2))
        return YES;
    else
        return NO;
}

Реализация планировщика для вызова метода обнаружения столкновений каждую секунду с помощью:

[self schedule: @selector(detectCollision) interval:0.25];

Таким образом, в вашей игре каждый раз, когда вызывается метод collisionDetect, вы можете обнаруживать столкновения. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...