Itérer à travers tous les CCSprite
dans votre tableau (appeler A
), et pour chaque itération itérer à nouveau par chaque CCSprite
dans le tableau (hors A
lui-même bien sûr) (appeler celui-ci B
). Maintenant, utilisez CGRectIntersectsRect
avec boundingBox
pour trouver une collision entre eux. Il va quelque chose comme ceci:
for (CCSprite *first in mySprites) {
for (CCSprite *second in mySprites) {
if (first != second) {
if (CGRectIntersectsRect([first boundingBox], [second boundingBox])) {
// COLLISION! Do something here.
}
}
}
}
Modifier: Mais bien sûr, il est possible que si deux sprites entrent en collision, « l'événement de collision » se produira deux fois (d'abord du point de vue de Sprite, et puis du point de vue du sprite B).
Si vous souhaitez uniquement que l'événement de collision se déclenche une fois par contrôle, vous devez mémoriser les paires afin de pouvoir ignorer les collisions qui ont déjà eu lieu lors de ce contrôle.
Il y a d'innombrables façons, vous pouvez vérifier pour cela, mais voici un exemple (code mis à jour):
Edité à nouveau:
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];
duplication possible de [comment utiliser collision de sprite cocos2d?] (Http://stackoverflow.com/questions/1338569/how-to-use-cocos2d-sprite-collision) – sergio