LWJGL:根据鼠标位置旋转四边形

时间:2014-02-09 16:16:22

标签: java rotation mouse lwjgl angle

我想让一个角色拿着枪,但是我想让枪随着鼠标移动。例如,如果鼠标已启动,则枪指向上方。如果鼠标在左侧,则枪指向左侧。我使用玩家位置和鼠标位置来构造一个直角三角形,然后使用反正弦来找到仰角。但是,这仅适用于90度的移动。有什么想法,我怎么能接近这个,以便我得到一个完整的360度旋转?

计算角度的代码:

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;
}

当前旋转(粉红色代表玩家;绿色代表枪;黄色代表鼠标):

1 个答案:

答案 0 :(得分:2)

您可以使用Math.atan2(mouseY-gunY, mouseX-gunX),它将返回pi和-pi弧度之间的角度,或者在将其转换为度数后返回180和-180度。使用asin的问题是1/1等于-1/-1,这使得函数无法区分它们,并且您希望在每种情况下都有不同的结果。