Обнаружение столкновений в Cocos2D

Я разрабатываю игру, в которой использовал 40 объектов CCSprite. Мне нужно обнаружить столкновение между ними. Я могу обнаружить столкновение между двумя спрайтами. Теперь, как я могу проверить 1 объект против всех остальных объектов? Будет ли работать цикл FOR? или есть другой способ сделать это?


person Shakti    schedule 19.01.2011    source источник


Ответы (2)


Я думаю, что для первой итерации вы должны реализовать цикл for и посмотреть, достаточно ли он быстр.

Если это не так, я думаю, вы могли бы разделить свою игровую область на прямоугольники и распределить свои объекты по прямоугольникам (объект, который перекрывает несколько прямоугольников, принадлежит им всем). Затем, когда вы выполняете столкновение, вы можете проверить только прямоугольник, в котором находится ваш первоначальный объект. Конечно, это во многом зависит от того, что у вас там есть. Если все объекты будут много двигаться, это может быть не такой уж и крутой идеей.

person Mihai Damian    schedule 20.01.2011

Почему бы тебе не использовать Box2D или бурундуков?

Для Box2D эта ссылка поможет.

Для Cocos2D поможет следующий код.

Вам нужно добавить следующие строки

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

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

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

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

-(void)collisonDetect:(cpArbiter*)arb {

NSLog(@"COLLISION DETECTED");

}

person Shashank Kulshrestha    schedule 11.12.2012