Выполните итерацию через каждый CCSprite
в вашем массиве (назовите его A
), и для каждой итерации повторите итерацию через каждый CCSprite
в массиве (исключая A
* 1008) * само собой разумеется) (назовите это B
). Теперь используйте CGRectIntersectsRect
вместе с boundingBox
, чтобы найти столкновение между ними. Это выглядит примерно так:
for (CCSprite *first in mySprites) {
for (CCSprite *second in mySprites) {
if (first != second) {
if (CGRectIntersectsRect([first boundingBox], [second boundingBox])) {
// COLLISION! Do something here.
}
}
}
}
Редактировать : Но, конечно, возможно, что если два спрайта столкнутся, «событие столкновения» произойдет дважды (сначала с точки зрения спрайта A, а затем с точки зрения спрайта B).
Если вы хотите, чтобы событие столкновения запускалось только один раз при каждой проверке, вам необходимо запомнить пары, чтобы можно было игнорировать столкновения, которые уже произошли в этой проверке.
Существует бесчисленное множество способов проверить это, но вот пример (обновленный код):
Отредактировано снова :
NSMutableArray *pairs = [[NSMutableArray alloc]init];
bool collision;
for (CCSprite *first in mySprites) {
for (CCSprite *second in mySprites) {
if (first != second) {
if (CGRectIntersectsRect([first boundingBox], [second boundingBox])) {
collision = NO;
// A collision has been found.
if ([pairs count] == 0) {
collision = YES;
}else{
for (NSArray *pair in pairs) {
if ([pair containsObject:first] && [pair containsObject:second]) {
// There is already a pair with those two objects! Ignore collision...
}else{
// There are no pairs with those two objects! Add to pairs...
[pairs addObject:[NSArray arrayWithObjects:first,second,nil]];
collision = YES;
}
}
}
if (collision) {
// PUT HERE YOUR COLLISION CODE.
}
}
}
}
}
[pairs release];