【问题标题】:LWJGL: Rotate quad based on mouse positionLWJGL:根据鼠标位置旋转四边形
【发布时间】:2014-02-09 16:16:21
【问题描述】:

我想让一个角色拿着枪,但我想让枪随着鼠标移动。例如,如果鼠标向上,则枪指向上方。如果鼠标在左侧,则枪指向左侧。我使用玩家位置和鼠标位置构建了一个直角三角形,然后使用反正弦求出仰角。但是,这只适用于 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;
}

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

【问题讨论】:

    标签: java rotation mouse lwjgl angle


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2019-03-04
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多