En effet, en utilisant les lois basiques de la physique, tu peux rapidement arriver à l'effet que tu veux.
Ton joueur doit posséder les variables, accélération, vitesse et position et tu dois pouvoir récupérer le delta t (qui correspond au temps passé entre 2 calculs de mouvements).
En gros ça fait :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
Player::Move()
{
if (stand) { // stand est une variable booléenne qui indique si le joueur est à l'arrêt
ax = 0;
vx *= 0.94; // si le joueur est à l'arret, sa vitesse décroît
}
else {
if (right) { // si le joueur va à droite
ax = acceleration; // acceleration est une constante = 0.001
}
else if (left) {
ax = -acceleration;
}
}
int delta_t = timer.GetTimer() - timer_move;
timer_move = timer.GetTimer();
vx += ax * delta_t; // Calcul de la vitesse
if (vx > speed) { // speed est une constante qui représente la vitesse max = 0.2
vx = speed;
}
if (vx < -speed) {
vx = -speed;
}
x += vx * delta_t; // Calcul de la position
} |
C'est un modèle qui me convient la plupart du temps, mais on peut aller plus loin avec les frottements.
Le plus important c'est :
- Calcul de l'accélération
- Calcul de la vitesse
- Calcul de la position
Après si tu fais un mario-like, il faut gérer le saut, mais c'est quasiment la même chose, il faut juste donner une valeur négative à vy lors d'un saut.
Partager