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
Vous devez vous connecter pour publier un commentaire.
Qui ressemble à un chemin difficile à faire. Je nai pas eu le codage long moi-même, mais peut-être que ce qui suit pourrait vous aider.
disons u un nsmutablearray les ennemis et vous ajouter le nouvel ennemi de l'objet de ce tableau si jamais vous en créer un. ennemi objet serait un ccnode et ont un ccsprite dans il appelle _enemySprite
alors ne la touche
espère que cette aide
Mais quand il n'convertToGL: aidé moi
OriginalL'auteur glogic
Une autre façon de faire est que le calcul de la distance entre la position de contact et vos sprites.. Si le toucher est assez proche de l'un de vos sprites, vous pouvez le tuer.. quelque Chose comme ça..
OriginalL'auteur user123