2011-04-19 4 views
0

J'ai ce jeu où j'ai besoin de savoir si la balle a frappé un mur sur le côté (pour rebondir sur l'axe des x) ou sur le dessus (pour rebondir sur l'axe des y, comme un rebond sur le sol). Ils fonctionnent bien individuellement, mais quand je décommente les deux, ça ne marche pas. (Je pense que c'est parce que le code est 'chevauchement'?). Quoi qu'il en soit, voici le code, et toute aide est fantastique:Détection de collision carrée iPhone

if (CGRectIntersectsRect(guy.frame, wall_01.frame)) { 
      if (guy.frame.origin.y+guy.frame.size.height >= wall_01.frame.origin.y && guy.frame.origin.y <= wall_01.frame.origin.y+wall_01.frame.size.height) { 
       iJump *= kRestitution; 
      } 
      if (guy.frame.origin.x+guy.frame.size.width >= wall_01.frame.origin.x && guy.frame.origin.x <= wall_01.frame.origin.x+wall_01.frame.size.width) { 
       jJump *= kRestitution; 
      } 
     } 
+0

quel est le comportement avec les deux ifs décommentée ? – Alvin

+0

L'axe des x fonctionne seulement –

+0

Comment utilisez-vous les variables iJump et jJump? – Alvin

Répondre

1

mur en supposant est sur le côté gauche et y augmente de haut en bas

CGFloat leftWall = someXPosition; 
CGFloat ground = someYPosition; 


CGFloat ballLeft = CGRectGetMinX(guy.frame); 
CGFloat ballRight = CGRectGetMaxX(guy.frame); 
CGFloat ballBottom = CGRectGetMaxY(guy.frame); 

if (ballLeft <= leftwall && ballBot >= ground){ 
    //ball hit corner ? 

} else if (ballLeft <= leftWall){ 
    //passed or touched wall 

} else if (ballBot >= ground){ 
    //passed or touched ground 
} 
+0

non encore rien de différent –

+0

je l'ai modifié, je n'ai jamais fait quelque chose comme ça serait comment je vais faire pour déterminer deux cadres interagissant les uns avec les autres – ssj

+0

Vous venez de sauvegarder mon Bacon! Merci beaucoup je forcot sur cgrectget –