背景:我有一个鸟瞰的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速度相同,而速度步长是一个很小的值,使其更平滑而且不会太突然(船不应该从快速向左方向转向直接快速向右方向).
我的问题:使用上面的代码,我相信速度将在对角线方向上更快调整,而在水平/垂直线上调整速度更慢.如何纠正此问题以获得相同的目标速度?
非常感谢您的帮助!
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)