2010-07-07 11 views
0

Je semble avoir un problème étrange avec un jeu 2D sur lequel je travaille. Pour déterminer si mon sprite de personnage jouable atterrit sur une plateforme, je fais d'abord une instruction if en vérifiant CGRectIntersectsRect et une fois que j'ai déterminé que le sprite du joueur et le sprite de la plateforme ont croisé, je vérifie que le point central la hauteur du joueur) sont au-dessus de la plate-forme, si c'est le cas, je place alors la vitesse 'y' du joueur à zéro.Détection de collision dans OpenGL ES sur l'iPhone

playerVelocity.x=5; 

playerVelocity.y+=gravity; 

if (CGRectIntersectsRect([turtle getBounds], [platform getBounds])) { 

if ([player getPosition].y>p.position.y+([player getBounds].size.height/2)) { 
    if (playerVelocity.y>0) { 
    playerVelocity.y=0; 
    inJump=NO; 
    } 

}else { 
    inJump=YES; 
} 
} 

[player setPosition:CGPointMake([player getPosition].x+playerVelocity.x, [player getPosition].y-playerVelocity.y)]; 

La plupart du temps ce code fonctionne sur le cycle de jeu, mais de temps en temps, la deuxième « instruction if » est ignorée et mon sprite joueur passe à travers la plate-forme. Je construis ce jeu dans OpenGL ES 1.1 avec une classe d'image-objet personnalisée.

Un aperçu de ce problème serait apprécié!

+0

À quel point '[player getPosition]' vous donne-t-il un avantage? En haut à gauche? Centre? Qu'en est-il de 'p.position'? –

+0

Ils donnent tous les deux le point central. – Scott

Répondre

1

Une chose à vérifier est de s'assurer que le lecteur ne passe pas vraiment à travers la plate-forme. Quelle est la hauteur de la plate-forme? Si la hauteur de la plate-forme n'est pas grande, alors le joueur pourrait être au-dessus de la plate-forme (dans un cadre) et ensuite dans le cadre suivant (player.y + playerVelocity.y) à plus de la moitié de la plate-forme de l'autre. Ce qui signifierait que cela ne "toucherait" jamais la plate-forme même si cela semble visuellement le cas.

Une chose que vous pouvez faire est d'imprimer en utilisant un NSLog() les valeurs. de cette façon, quand vous manquez, vous pouvez vérifier les journaux pour voir ce que les valeurs de données ont été manqués.

Il existe de nombreuses façons de traiter les «atterrissages sur des plates-formes». L'une consiste à s'assurer que le personnage a atteint une altitude suffisamment élevée pour être au-dessus de la plate-forme, puis, si jamais il traverse, vous réinitialisez son emplacement pour être sur la plate-forme.

1

Si vous créez un jeu de plateforme, il y a beaucoup de problèmes comme celui-ci que vous allez devoir affronter. Épargnez-vous des maux de tête et lisez les didacticiels MetaNet sur la physique des plates-formes: N tutorials. Le problème que vous mentionnez est abordé en particulier, ainsi que plusieurs autres questions que vous allez probablement rencontrer.

+0

Cela semble utile. Merci! – Scott