[2D] Déplacement d'un sprite à vitesse constante
Bonjour tout le monde,
Je veux déplacer un sprite à l'écran. Je génère aléatoirement un point (x, y) de destination et je veux déplacer ce sprite à une vitesse constante et d'une manière fluide, quelque soit la destination.
J'ai utilisé l'équation de droite (y = ax + b), ça fonctionne très bien à un détail prêt, plus b est grand plus le sprite va vite quand je fais x+1 à chaque boucle.
y a t'il une autre méthode que l'équation de droite pour le déplacement ? ou y a t'il une astuce pour rendre constante la vitesse de déplacement tout en gardant la fluidité du mouvement (sans saccade) ?
D'avance merci ...
[2D] Déplacement d'un sprite à vitesse constante
re,
J'ai trouvé un moyen de rendre la vitesse constante sans saccade, en faisant en sorte que le a de y = ax + b soit toujours < 1, mais du cout je perd les déplacements verticaux,
puisque dans le cas des déplacements verticaux, le a de y = ax +b est > 1.
haaa !!!
l'équation de droite n'est donc pas le meilleur moyen de gérer les déplacements ....
help !
[2D] Déplacement d'un sprite à vitesse constante
Bonsoir Messieurs,
Merci pour vos réponses. J'ai finalement trouvé la solution à mon problème. J'ai finalement géré le déplacement de mon sprite avec les vecteurs.
Voici ma solution :
Je déclare 3 vecteurs :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import org.lwjgl.util.vector.Vector2f;
public Vector2f PosVector = new Vector2f(); // vecteur de la position courante du sprite
public Vector2f DestVector = new Vector2f(); // vecteur de destination désirée
public Vector2f DirectVector = new Vector2f(); // vecteur de la destination
sprite.Speed = 1; // ou 2 ou 3 ou 4 .....
Je click sur la souris
// la destination est la position de la souris
// j'initialise les vecteurs
sprite.PosVector.set(sprite.X_Position, sprite.Y_Position);
sprite.DestVector.set(x_mouse, y_mouse);
sprite.DirectVector.set(sprite.DestVector.getX() - sprite.PosVector.getX(), sprite.DestVector.getY() - sprite.PosVector.getY());
// je norme le vecteur de direction
sprite.DirectVector.normalise();
// je recalcule à chaque boucle la nouvelle position du sprite
sprite.X_Position += sprite.DirectVector.getX() * sprite.Speed;
sprite.Y_Position += sprite.DirectVector.getY() * sprite.Speed; |
ça fonctionne nickel !!
Merci encore !