Jason
Plutôt que d'avoir trois attributs d'objet,
- Point (x, y) position
- Direction Vector2D (x, y)
- Vitesse int
Il est souvent beaucoup plus facile de combiner la direction et la vitesse dans un vecteur vitesse. Ensuite, vous avez seulement deux attributs,
- Point (x, y) position
- Vitesse Vector2D (x, y)
Mise à jour de la position
Lorsque vous devez mettre à jour la position de l'objet, procédez comme suit:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
où Δt
est votre delta temporel - ou différence de temps - ou pas de temps.
Mise à jour de la position et de la vitesse
Il est également très facile de gérer l’accélération (par exemple, par gravité). Si vous avez un vecteur d'accélération, vous pouvez mettre à jour la vitesse et la position ensemble comme ceci:
position.x += (velocity.x * Δt) + (0.5 * acceleration.x * Δt * Δt);
position.y += (velocity.y * Δt) + (0.5 * acceleration.y * Δt * Δt);
velocity.x += acceleration.x * Δt;
velocity.y += acceleration.y * Δt;
(Ceci est essentiellement la formule s = vt + ½at² de Physics 101.)
Appliquer une vitesse
Si vous souhaitez appliquer une vitesse donnée dans une direction normalisée, vous pouvez définir la vitesse comme suit:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Dériver une vitesse
Et si vous devez faire l'inverse - en déduisant la vitesse et la direction d'un vecteur de vitesse donné - vous pouvez simplement utiliser le théorème de Pythagore ou la .Length()
méthode:
speed = velocity.Length();
Et une fois que la vitesse est connue, la direction normalisée peut être calculée en divisant la vitesse par la vitesse (en évitant de diviser par zéro):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}