Pourquoi tu t'embêtes avec les touches ?
Si test calculs sont bien faits, seule la valeur de l'accélération compte.
Tu peux très bien décompose l'accélération sur chacune de ses composantes Xa, Ya et Za et ne regarder que l'accélération sur Z (axe dirigé du bas vers le haut).
Ensuite, pour savoir si le véhicule monte ou descend, tu fait ce que Gzsume t'avait dit, tui compares la position sur l'axe Z du joueur entre le début et la fin de l'intervalle de temps.
Voici comment j'aurais procédé :
Je lance un timer général qui va, chaque 500 ms par exemple, stocker la position et la vitesse du joueur (ou alors, on lance un timer pour chaque joueur mais ce sera beaucoup plus gourmand et les calculs qui suivent ne sont vraiment pas compliqués).
L'ancienne position est (Px1, Py1, Pz1) et l'ancienne vitesse est (Vx1, Vy1, Vz1)
La nouvelle position est (Px2, Py2, Pz2) et la nouvelle vitesse est (Vx2, Vy2, Vz2)
Pour savoir si le joueur monte ou descend, je calcule Pz2-Pz1. Si le résultat est positif, le joueur est en train de monter, si il est négatif, il est en train de descendre. Et si il est à 0, le joueur est à altitude constante.
Ensuite, je calcule (Vz2-Vz1)/t où t est la durée de mon intervalle de temps.
Si ce résultat est positif, le joueur est en train d'accélérer. Si il est négatif, le joueur est en train de décélérer et si il est nul, le joueur est à vitesse constante.
En fonction de la valeur absolue de ce résultat, j'applique un effet plus ou moins grand.
++
Syg