2014-02-09 80 views
1

我想讓一個角色拿着槍,但我想讓槍隨着鼠標移動。例如,如果鼠標彈起,槍指向。如果鼠標位於左側,槍指向左側。我使用球員位置和鼠標位置來構造一個直角三角形,然後使用反正弦來查找仰角。但是,這隻適用於90度的移動。任何想法,我可以如何處理這個問題,以便獲得360度全方位的旋轉?LWJGL:基於鼠標位置旋轉四邊形

代碼計算角度:

private double calcAngle() 
{ 
    double mouseX,mouseY,subX,subY,playerToMouse,mouseToSub,angle; 
    mouseX = Mouse.getX(); 
    mouseY = Mouse.getY(); 
    subX = mouseX; 
    subY = y; 
    playerToMouse = Math.sqrt(Math.pow(x-mouseX,2)+Math.pow(y-mouseY,2)); 
    mouseToSub = Math.sqrt(Math.pow(mouseX-subX,2)+Math.pow(mouseY-subY,2)); 
    angle = Math.toDegrees(Math.asin(mouseToSub/playerToMouse)); 
    return angle; 
} 

當前旋轉(粉紅色代表玩家;綠色代表槍;黃色代表鼠標):

回答

2

您可以使用Math.atan2(mouseY-gunY, mouseX-gunX)它會返回一個pi和-pi弧度之間的角度,或者在將其轉換爲度數後180或-180度之間。使用asin的問題是1/1等於-1/-1,這使得函數無法區分它們,並且在每種情況下都需要不同的結果。