gpt4 book ai didi

java - 旋转玩家面对行星

转载 作者:行者123 更新时间:2023-12-04 18:17:02 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于java - 旋转玩家面对行星,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com