Я разрабатываю игру, в которой использовал 40 объектов CCSprite. Мне нужно обнаружить столкновение между ними. Я могу обнаружить столкновение между двумя спрайтами. Теперь, как я могу проверить 1 объект против всех остальных объектов? Будет ли работать цикл FOR? или есть другой способ сделать это?
Обнаружение столкновений в Cocos2D
Ответы (2)
Я думаю, что для первой итерации вы должны реализовать цикл for и посмотреть, достаточно ли он быстр.
Если это не так, я думаю, вы могли бы разделить свою игровую область на прямоугольники и распределить свои объекты по прямоугольникам (объект, который перекрывает несколько прямоугольников, принадлежит им всем). Затем, когда вы выполняете столкновение, вы можете проверить только прямоугольник, в котором находится ваш первоначальный объект. Конечно, это во многом зависит от того, что у вас там есть. Если все объекты будут много двигаться, это может быть не такой уж и крутой идеей.
Почему бы тебе не использовать 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");
}