Fermer2
BrunniLe 03/07/2008 à 23:41
Hello!
Je suis en train d'essayer de faire un jeu de plate-forme en time-based, plutôt qu'à mon habitude en frame-based. Et je rencontre des difficultés, par exemple pour la physique, avant j'avais simplement une vitesse, affectée par l'accélération, puis juste après la position était affectée par la vitesse. Ca donnait 2 additions, c'était super simple, mais là ça ne fonctionne pas (si le temps entre les frames est très grand). Alors j'ai fait autrement en me rappelant tant bien que mal des cours de physique:

# Membres: ax, ay (accélérations), vx, vy (vitesses), onGround
# On les conserve entre les frames.
function collisionEngine(t: number):
    # Ces nombres représentent le déplacement à faire pour cette "frame"
    dx, dy: numbers

    # Note: t est le temps écoulé depuis le dernier appel
    dx = 1 / 2 * ax * t ^ 2 + vx * t
    # Pareil en y
    dy = 1 / 2 * ay * t ^ 2 + vy * t

    # Modification de l'accélération ici
    if keyboard: held(Left):
        ax = 240
    else if keyboard: held(Right):
        ax = -240
    else:
        ax = 0

    # Gestion du saut
    # Et c'est là que ça blesse...
    # Pour moi ça me semble logique de faire ça ici, mais en fait non,
    # il n'y a que si je le fais en haut (avant de calculer dx/dy) que ça
    # marche correctement...
    # Actuellement en fait le saut est plus faible si t est grand
    if keyboard: pressed(Up) and onGround:
        vy = -300

    # La vitesse a besoin d'évoluer au cours du temps
    vx = vx + ax * t
    vy = vy + ay * t

    # Ca aussi, est-ce que c'est bien de le faire là?
    # "Ralentissement" du perso dû au "frottement"
    vx = vx * 0.95

    deplaceLePersoXY(dx, dy)


Bref je comprends bien que là je fous un peu la merde en modifiant aussi les vitesses, alors que normalement je ne devrais travailler qu'avec le niveau supérieur (accélération), sauf que ça me semble trop dur (dans le cas d'un saut il faudrait que je calcule l'accélération nécessaire pour passer de "vy actuel" à 300, et ce serait compliqué et lent en plus) sad

Des idées pour faire une bonne physique en time-based? smile (et pas forcément trop complexe vu que c'est pour du jeu wink)