Détecter si un sprite a été touché sur Cocos2d-iphone

Je suivais Ray tutoriel pour faire un simple jeu pour l'iPhone (ici: http://goo.gl/fwPi) , et a décidé que je voulais que les ennemis éliminés quand ils se touchaient.

Ma première approche a été de pondre un petit CCSprite sprite sur la touche emplacement, l'utilisation CGRectMake pour créer une zone de délimitation dudit objet à détecter si l'ennemi sprite a été touché. Un peu comme Ray ne avec le projectile/ennemi. Mais bien sûr, ma façon de faire ne fonctionne pas et je ne peux pas creuser moi-même de sortir de ce trou.

Voici les extraits de code. Toute aide est appréciée:

- (void)ccTouchesEnded:(NSSet *)touche withEvent:(UIEvent *)événement { 

//Choisissez l'une des touches de travailler avec 
UITouch *appuyez = [touche anyObject]; 
CGPoint lieu = [auto convertTouchToNodeSpace: touch]; 
lieu = [[CCDirector sharedDirector] convertToGL:emplacement]; 
CCSprite *touchedarea = [CCSprite spriteWithFile:@"Icône-72.png" rect:CGRectMake(emplacement.x, de l'emplacement.y, 2, 2)]; 
touchedarea.tag = 2; 
[auto addChild:touchedarea]; 
[_touchedareas addObject:touchedarea]; 

} 



- (void)mise à jour:(ccTime)dt { 

NSMutableArray *touchedareasToDelete = [[NSMutableArray alloc] init]; 
pour (CCSprite *touchedarea dans _touchedareas) { 
CGRect touchedareaRect = CGRectMake( 
touchedarea.position.x, 
touchedarea.position.y, 
touchedarea.contentSize.largeur, 
touchedarea.contentSize.hauteur); 

NSMutableArray *targetsToDelete = [[NSMutableArray alloc] init]; 
pour (CCSprite *cible dans _targets) { 
CGRect targetRect = CGRectMake( 
cible.position.x - (la cible.contentSize.largeur/2), 
cible.position.y - (la cible.contentSize.hauteur/2), 
cible.contentSize.largeur, 
cible.contentSize.hauteur); 

si (CGRectIntersectsRect(touchedareaRect, targetRect)) { 
[targetsToDelete addObject:cible]; 
} 
} 

pour (CCSprite *cible dans targetsToDelete) { 
[_targets removeObject:cible]; 
[auto removeChild:cible de nettoyage:OUI]; 
} 

si (targetsToDelete.count > 0) { 
[touchedareasToDelete addObject:touchedarea]; 
} 
[targetsToDelete release]; 
} 

pour (CCSprite *touchedarea dans touchedareasToDelete) { 
[_touchedareas removeObject:touchedarea]; 
[auto removeChild:touchedarea de nettoyage:OUI]; 
} 
[touchedareasToDelete release]; 
} 
J'ai posé une question sur les meilleures pratiques pour ceci: stackoverflow.com/questions/2900691/... Espérons que cette aide!

OriginalL'auteur thoumad | 2011-01-16