2010-05-22 3 views
1

Je sais que j'ai probablement posté trois questions liées à cela puis les ai supprimées, mais c'est seulement parce que je les ai résolues avant d'avoir une réponse. Mais, celui-ci je ne peux pas résoudre et je ne crois pas que c'est si dur comparé aux autres. Donc, sans plus tarder, voici mon problème:Problème de détection de collision carrée (iPhone)

Donc j'utilise Cocos2d et l'un des problèmes majeurs est qu'ils n'ont pas de boutons. Pour compenser le manque de boutons, j'essaie de détecter si, à la fin d'un contact, il entre en collision avec un carré (le bouton). Voici mon code:

- (void)ccTouchesEnded:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    NSLog(@"%f", 240-location.y); 
    if (isReady == YES) 
    { 
     if (((240-location.y) <= (240-StartButton.position.x - 100) || -(240-location.y) >= (240-StartButton.position.x) + 100) && ((160-location.x) <= (160-StartButton.position.y) - 25 || (160-location.x) >= (160-StartButton.position.y) + 25)) 
     { 
      NSLog(@"Coll:%f", 240-StartButton.position.x); 
      CCScene *scene = [PlayScene node]; 
      [[CCDirector sharedDirector] replaceScene:[CCZoomFlipAngularTransition transitionWithDuration:2.0f scene:scene orientation:kOrientationRightOver]]; 
     } 
    } 
} 

Savez-vous ce que je fais mal?

+0

Vous ne savez pas si c'est intentionnel, mais il semble que certaines de vos variables soient commutées vers la fin. Vous comparez x contre y. –

+0

@Ed Marty: Oui, ce serait exprès ... –

+0

Vous n'avez pas expliqué ce qui ne va pas. Cela ne correspond-il pas? Est-ce que ça correspond quand ça ne devrait pas? N'avez-vous pas un événement du tout? En outre, avez-vous défini un point d'arrêt et l'avez parcouru, pour voir quelles valeurs prennent les variables? –

Répondre

0

Pourquoi ne vous venez de faire

if (isReady == YES) 
{ 
    if (CGRectContainsPoint([StartButton boundingBox],location)) 
    { 

     CCScene *scene = [PlayScene node]; 
     [[CCDirector sharedDirector] replaceScene:[CCZoomFlipAngularTransition transitionWithDuration:2.0f scene:scene orientation:kOrientationRightOver]]; 
    } 
} 

[startButton boundingBox] renvoie le CGRect du nœud et CGRectContainsPoint vérifie si l'emplacement CGPoint est à l'intérieur du bouton.

+0

Merci, j'ai essayé votre code et seulement dû faire le petit changement de faire une variable appelée inverseLocation qui a renversé les coordonnées de l'emplacement en raison du fait que l'iphone est tourné pendant le jeu et l'utilise à la place. –

Questions connexes