Contexte: J'ai un jeu JavaScript de vue d'oiseau où le joueur contrôle un vaisseau spatial en touchant un cercle - par ex. touchez à gauche du centre du cercle, et le vaisseau se déplacera à gauche, touchera le coin supérieur droit et il se déplacera vers le coin supérieur droit et ainsi de suite ... plus loin du centre du cercle du pseudo joystick, plus la vitesse sera grande direction. Cependant, je ne suis pas régler directement la vitesse du navire, mais plutôt définir une valeur targetSpeed.x et targetSpeed.y, et le navire ajuste alors sa vitesse en utilisant quelque chose comme:Comment régler correctement la vitesse du sprite du lecteur? (Fondamentalement, une question de maths?)
if (this.speed.x < this.targetSpeed.x) {
this.speed.x += this.speedStep;
}
else if (this.speed.x > this.targetSpeed.x) {
this.speed.x -= this.speedStep;
}
... et même pour la vitesse y, et speedStep est une petite valeur pour le rendre plus lisse et pas trop abrupte (un vaisseau ne doit pas aller d'une direction rapide vers la gauche à une direction rapide vers la droite).
Ma question: En utilisant le code ci-dessus, je crois cependant que la vitesse sera ajustée plus rapidement dans les directions diagonales, et plus lente le long des lignes horizontales/verticales. Comment puis-je corriger cela pour avoir une vitesse cible égale?
Merci beaucoup pour toute aide!
Pourriez-vous reformuler votre question s'il vous plaît? Qu'est-ce que tu veux faire exactement? Merci. –
@Oren: Il est assez évident ce que l'OP veut faire --- faire en sorte que, si, disons, l'angle est de 45 degrés (par exemple, 'targetSpeed.x - speed.x == targetSpeed.y - speed.y'), alors l'incrément est toujours 'speedStep', pas' sqrt (2) * speedStep'. –