Я новичок в разработке игр cocos2dx ios. У меня есть 12 спрайтов в CCArray, и они случайным образом падают сверху вниз. Любой спрайт может появиться в любое время. Я сделал расслоение, что спрайт в индексе массива 0 будет приходить на уровне 12, а индекс 1 - на уровне 11 и т.д. Таким образом, спрайты, которые появляются сначала, впереди второго следующего спрайта. Но дело в том, что эта ситуация не всегда верна. Спринсы могут сначала иметь индекс 5, а затем индекс 4 и т.д. Итак, как обнаружить столкновение спрайтов, присутствующих в том же массиве, что, если они касаются друг друга ограничивающим полем, я могу заставить их замедлить секунду или что-то еще, чтобы они не перекрывались друг с другом. Я не использую Box2d и не хотят его использовать. Я просто хочу ответить без использования box2d и только в cocos2dx с помощью c++. Любой, кто может мне помочь Спасибо
CCArray mbox;
Напишите этот код в обновлении
for(int i = 0; i<mbox_count();i++)
for(int j = i+1; j<mbox_count();j++)
{
CCSprite* sp = static_cast<CCSprite*>mbox->objectatindex(j);
CCSprite* sp1 = static_cast<CCSprite*>mbox->objectatindex(i);
if(sp1->boundingBox().intersectsRect(sp->boundingBox()))
{
//whatever you want to do;
}
}
@Rajan Я бы рекомендовал использовать CC_FOREACH при поиске через CCArray, потому что у меня были проблемы с утечкой памяти, используя ответ Singhaks выше. Вместо этого вы можете написать свой код следующим образом:
// we need two objects to look at each element in our array
CCObject* obj_x = NULL;
CCObject* obj_y = NULL;
CCARRAY_FOREACH(_arr_x, obj_x) {
CCArray* _obj_x_arr = (static_cast<CCArray*>(obj_x));
CCARRAY_FOREACH(_obj_x_arr, obj_y) {
Sprite* _spriteImage_y = (static_cast<Sprite*>(obj_y));
Rect rect_a = IntersectionPoint_A -> getBoundingBox();
Rect rect_b = _spriteImage_y -> getBoundingBox();
if (rect_b.intersectsRect(rect_a)) {
// do whatever you like in here
}
}
}
Я написал более подробно здесь, если вам это нужно: https://kagato0110.wordpress.com/2015/07/24/how-to-traverse-through-a-2d-ccarray-cocos2dx-c-on-android/