我有一個2D側視射擊遊戲,我需要一些新的眼睛。我目前正在研究瞄準,部分工作原理:炮口速度是已知的,重力是已知的,x,y到目標的距離也是已知的。利用各種資源都在這裏對SE和維基百科,我想出以下方法計算初始載體爲彈丸速度:重寫,使Math.atan()工作不管方向
public Vector2 calculateAim(Vector2 pos, Unit target) {
// Check if previous calculation can be recycled
if (target.equals(lastTarget))
return lastAim.cpy();
lastTarget = target;
double v = RifleBullet.projectileSpeed; // Muzzle velocity
double g = Settings.gravity.y; // Gravity, positive value
double x = offset.x; // x distance to target. Negative if towards left
double y = offset.y; // y distance to target. Negative if lower
double theta = Math.atan(((v * v) - Math.sqrt((v*v*v*v) - (g*(g*(x*x) + 2*y*(v*v)))))/(g * x));
Vector2 aim = new Vector2(-(float)Math.cos(theta), (float)Math.sin(theta));
aim.nor();
aim.scl((float)RifleBullet.projectileSpeed);
lastAim = aim.cpy();
return aim;
}
上述部分作品:最右邊的傢伙會正確地瞄準。然而,站在左邊的那個人總是朝錯誤的方向射擊。它看起來像Y組件是正確的,但X組件很簡單地顛倒過來。如果我計算THETA後補充一點:
if (side.contains("left"))
angleInRadians += Math.PI;
...他們都火正確,但它不是從長遠來看是會出現在戰場上更多的單位可行的,並且它勢必會造成問題,當我得到到那一點。
我相信問題的根源可能是Math.atan()
函數,因爲我沒有檢查三角函數計算中的假設三角形是如何定向的。
我應該如何改進我的方法,使其能夠正常工作,無論誰的左/右/上/下?
閱讀atan2。 – Tenfour04