【问题标题】:rotate player to face planet旋转玩家面对行星
【发布时间】:2012-07-17 00:59:18
【问题描述】:

所以我无法让我的砂矿面对一颗行星。我有玩家和星球之间的角度,我也有玩家当前所处的角度,现在我想要做的是让我的玩家面对星球,但有增量变化。 (我这样做是因为我希望我的砂矿能够绕地球运行)

问题出在数学上,我增加了玩家旋转以匹配玩家和行星之间的角度,但是因为角度在 0 到 360 范围内工作,所以我的玩家不会绕轨道运行,因为玩家旋转可能是 2 但是与行星的角度是280所以游戏会让玩家转身,抱歉解释不好。

有谁知道如何让我的玩家成功环绕我的星球运行?

这是我的代码:

double rotation = Math.toDegrees(Math.atan2(currentPlanet.pos[1]-currentPlayer.pos[1], currentPlanet.pos[0]-currentPlayer.pos[0]));
if(rotation < 0)
{
    rotation += 360;
}

if(currentPlayer.rotation < rotation)
{
    currentPlayer.rotation += 0.15*delta;
}

if(currentPlayer.rotation > rotation)
{
    currentPlayer.rotation -= 0.15*delta;
}

【问题讨论】:

    标签: java rotation


    【解决方案1】:

    问题是 350° 也是 -10°。你想要更小的绝对值。

    解决方案非常简单。使用模运算将角度转换为正确的范围。

    /* returns angle x represented in range -180.0 ... 180.0 */
    double clampAngle(double x) {
        return (x%360.0+360.0+180.0)%360.0-180.0;
    }
    

    将您的角度差传递给此函数。结果的标志会告诉你应该转向哪个方向:

    double rotation = Math.toDegrees(Math.atan2(currentPlanet.pos[1]-currentPlayer.pos[1], currentPlanet.pos[0]-currentPlayer.pos[0]));
    double diff =  ((rotation-currentPlayer.rotation)%360.0+360.0+180.0)%360.0-180.0;   
    
    if(diff>0)
        turn right
    else
        turn left
    

    如果abs(diff) 非常小,您可能根本不想转。

    我不确定它是否会让你的玩家环绕你的星球。您需要设置正确的角速度和线速度。

    【讨论】:

    • 我将如何实现这个?
    • 我的播放器使用它只在一个方向上旋转,但它确实绕着 int hat 方向旋转,它不会向左移动有什么原因吗?
    • @Luke 尝试编辑后的代码。以前的版本可能会给出不正确的负角结果。
    【解决方案2】:

    您想要的是让您的玩家旋转以面对您计算出的行星和玩家之间角度的正负 90 度。当所有运动都与行星相切(90 度)时,就会发生轨道。

    因此,计算角度,将播放器角度与 +90 和 -90 进行比较,然后将播放器旋转到两者中较近的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多