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é!
À quel point '[player getPosition]' vous donne-t-il un avantage? En haut à gauche? Centre? Qu'en est-il de 'p.position'? –
Ils donnent tous les deux le point central. – Scott