如何正确调整播放器精灵速度?(基本上是一个数学问题?)

Phi*_*sen 2 math vector angle

背景:我有一个鸟瞰的JavaScript游戏,玩家通过触摸圆圈来控制太空飞船 - 例如触摸圆心的左侧,船将向左移动,触摸右上方,它将移动到顶部正确等等......离伪陀螺的圆心越远,朝这个方向的速度越快.但是,我不是直接调整船的速度,而是设置targetSpeed.x和targetSpeed.y值,然后船将使用以下内容调整其速度:

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;
}
Run Code Online (Sandbox Code Playgroud)

...和y速度相同,而速度步长是一个很小的值,使其更平滑而且不会太突然(船不应该从快速向左方向转向直接快速向右方向).

我的问题:使用上面的代码,我相信速度将在对角线方向上更快调整,而在水平/垂直线上调整速度更慢.如何纠正此问题以获得相同的目标速度?

非常感谢您的帮助!

Chr*_*ung 5

var xdiff = targetSpeed.x - speed.x;
var ydiff = targetSpeed.y - speed.y;
var angle = Math.atan2(ydiff, xdiff);
speed.x += speedStep * Math.cos(angle);
speed.y += speedStep * Math.sin(angle);
Run Code Online (Sandbox Code Playgroud)