我正在用 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 來歸一化速度并且能夠使速度恒定,但彈丸的方向不正確。
uj5u.com熱心網友回復:
將您的方向向量標準化(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是您想要的速度...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441743.html
標籤:javascript 数学 常数 速度 角度
