以恒定的角度移动球

Moving ball at constant rate with angle

我正在 JavaScript 编写一个小游戏,我正在 运行 解决数学问题。我正在尝试将一个对象移向我刚刚单击的位置。我能够使用下面的代码成功地做到这一点。但是我很难弄清楚如何使速度恒定。如果我靠近我拍摄的物体单击,X/Y 的差异很小,所以 dx/dy 很慢。如果我在远处单击,dx/dy 具有高值,因此它移动得更快。

这是我目前的代码。

let relativeXY = relMouseCord(e);
let rise = relativeXY[1] - pOne.posY; //<-- This is the distance between the Y coords
let run = relativeXY[0] - pOne.posX; //<-- This is the distance between the X coords

let angle = Math.atan2(rise,run)*180/Math.PI 
console.log('tan angle ' + Math.tan(angle))
console.log('acutal angle '+ angle)

bullet.x = pOne.posX
bullet.y = pOne.posY

tempdx = run * 0.02     //Math.cos(angle)
tempdy = rise * 0.02    //Math.sin(angle)

我尝试用cos和sin来归一化速度,并且能够使速度恒定,但是抛射物的方向不正确。

将方向向量 (run,rise) 标准化为单位大小:

tempdx = run  * 0.02 / sqrt((run*run)+(rise*rise))
tempdy = rise * 0.02 / sqrt((run*run)+(rise*rise))

或使用测角法(但不要像测角法预期的那样转换为 [deg] [rad] !!!)

let angle = Math.atan2(rise,run)
console.log('tan angle ' + Math.tan(angle))
console.log('acutal angle '+ angle*180/Math.PI)
tempdx = cos(angle) * 0.02
tempdy = sin(angle) * 0.02

...假设 0.02 是您想要的速度...