Chulien Utilisateur confirmé: Rang *****
Messages : 2232
| Sujet: Code pour plates-formes Jeu 21 Oct 2010 - 19:31 | |
| Salut,
je programme un jeu simple de plates-formes, et je ne veux pas utiliser les fonctions incluses dans GM, mais voilà, mon jeu est bourré de bugs (surtout quand on s'encastre en bas à gauche/droite d'un bloc après avoir sauté). De plus, je n'ai pas réussi à coder un équivalent à move_to_contact qui permet par exemple, lorsqu'on tombe à grande vitesse, de ne pas s'arrêter à 32 pixels du sol (parce que 32 est la vitesse et que y 32 est occupé) pour ensuite retomber à faible vitesse...
Je me suis dit que la modification des x_speed, y_speed et gravité ne pouvait pas influer sur les problèmes du genre "encastré dans un mur", "passe à travers un mur", et que seul le code modifiant les x et y pouvait causer ces bugs.
Jusque là, est-ce que j'ai raison?
Donc j'utilise tout un tas de scripts pour modifier les vitesses en fonction des place_free, et une fois ceux-ci tous exécutés, j'effectue les déplacements nécessaires. Quelqu'un connaîtrait-il une ou la meilleure façon de procéder ?
step du héros après modification des vitesses (x et y_speed sont limités à 30) - Code:
-
y_speed += gravite;
if(place_free(x+x_speed, y+y_speed)) { x += x_speed; y += y_speed; } else if(place_free(x, y+y_speed)) { y += y_speed; for(i=x_speed; i>0; i-=1) if(place_free(x+i,y)) { x+=i; break; } } else if(place_free(x+x_speed, y)) { x += x_speed; for(i=y_speed; i>0; i-=1) { if(place_free(x,y+i)) { y+=i; break; } } } else { for(i=x_speed; i>0; i-=1) for(j=y_speed; j>0; j-=1) if(place_free(x+i,y+j)) { x += i; y += j; break; } }
if(place_free(x,y+1)) gravite = 0.5; else { gravite = 0; y_speed = 0; } edit: j'ai changé le code depuis mon premier post
voilà ce que ça donne: platform_test.exe
|
|
Chulien Utilisateur confirmé: Rang *****
Messages : 2232
| Sujet: Re: Code pour plates-formes Jeu 21 Oct 2010 - 22:53 | |
| Finalement je pense que j'utiliserai ce code, qui n'est peut-être pas le meilleur qui soit, mais qui devrait suffire : - Code:
-
if( place_free(x+x_speed, y+y_speed) ) { x += x_speed; y += y_speed; } else if( place_free(x, y+y_speed) ) { x_speed = 0; y += y_speed; } else if( place_free(x+x_speed, y) ) { x += x_speed; y_speed = 0; } else { x_speed = 0; y_speed = 0; } |
|