這似乎是一個簡單的觸發問題,但無論出於何種原因,事情都沒有解決。圍繞一個點
我試圖簡單地有一個對象在用戶按下A/D鍵(圍繞鼠標圓周運動,同時仍然面對鼠標)的給定點旋轉。
這裏是到目前爲止,我已經試過代碼(所有的數學函數接受和返回弧度):
if (_inputRef.isKeyDown(GameData.KEY_LEFT))
{
x += 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x) - Math.PI * 0.5);
y += 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x) - Math.PI * 0.5);
}
else if (_inputRef.isKeyDown(GameData.KEY_RIGHT))
{
x += 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x) + Math.PI * 0.5);
y += 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x) + Math.PI * 0.5);
}
並完成同樣的事情更優雅的方法:
if (_inputRef.isKeyDown(GameData.KEY_LEFT))
{
x += 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x));
y -= 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x));
}
else if (_inputRef.isKeyDown(GameData.KEY_RIGHT))
{
x -= 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x));
y += 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x));
}
現在,他們都是一種工作,物體圍繞鼠標旋轉,同時始終面向鼠標,但如果有足夠的時間按住沙漏按鈕,則會變得越來越明顯t物體也從鼠標旋轉離開,彷彿它被推開。
我不知道這是爲什麼以及如何解決它。
任何見識都被讚賞!
你確定它不是浮點漂移嗎? 「給予足夠的時間」多長時間。這可能是事前或事後發生的事情(我注意到'x'和'y'都是'+ =',所以不清楚還有什麼影響最終值) –
我認爲主要問題是誤解了什麼是strafing 。 Strafing:玩家沿着其y軸直線移動,同時保持朝向一個點的方向。 所以解決方案是,旋轉面對鼠標,然後移動到左側或右側的對象。它不是一個單一的計算。它的兩個簡單步驟。 –
這基本上是他目前正在做的,這導致了所描述的擴大的圓形運動的問題。 – Torious