旋转玩家面对行星

时间:2012-07-14 18:50:43

标签: java rotation

所以我很难让我的玩家面对一个星球。我有玩家和行星之间的角度,我也有玩家当前所处的角度,现在我想要做的就是让我的玩家面对这个星球但是有一个渐进的变化。 (我之所以这样做是因为我希望我的布局能够绕行星运行)

问题在于数学,我增加了玩家的旋转以匹配玩家和行星之间的角度,但是因为角度在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;
}

2 个答案:

答案 0 :(得分:2)

问题是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)非常小,您可能根本不想转弯。

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

答案 1 :(得分:1)

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

因此,计算角度,将玩家角度与+90和-90进行比较,然后将玩家向两者中的较近者旋转。