gpt4 book ai didi

java - Delta-time lag compensation 弄乱了我的游戏 Spinner

转载 作者:行者123 更新时间:2023-11-30 08:23:45 24 4
gpt4 key购买 nike

在我的游戏中,我有一个 spinner ,就像马里奥中的那些一样。

当游戏不滞后时,旋转器会完美运行并以恒定速度 360 度完整旋转。

然而,当它滞后时(Android 版本经常发生),gaps start appearing between the different projectiles and it doesn't even rotate in a circle anymore, it just rotates in a distorted elliptical pattern .

这是我的 Spinner 的 Java 代码

         helper += speedVariable * 1f;
speedY = (float) (speedVariable *helper2 * Math.cos(Math.toRadians(helper)));
speedX = (float) (speedVariable * -1 * helper2 * Math.sin(Math.toRadians(helper)));


setX(getX() + (speedX * delta) + ((Background.bg.getSpeedX() * 5) * delta));
setY(getY() + (speedY * delta));

float helper 是使微调器旋转的余弦和正弦函数内部的字段

speedVariable 控制公转速度

helper2 设置它旋转的半径

我做错了什么吗?谢谢!

最佳答案

不要相对于前一个位置设置新位置。您想留在围绕中心点的圆上,因此从该点可靠地计算位置要容易得多:

setX(getCenterX() + xFromCenter + (Background.bg.getSpeedX() * 5));
setY(getCenterY() + yFromCenter);

(我不确定背景部分是关于什么的,我只是假设它应该保留。)

xFromCenteryFromCenter 是旋转的余弦和正弦。在您的原始代码中,您在 helper 中进行了轮换,所以让我们保持这样。但是您应该将 delta 应用于它的增量,因为您希望在相同的秒数内旋转相同的度数。

helper += speedVariable * delta;

这样想:delta 应该直接影响它的旋转量,而不是它在 x 和 y 轴上移动的量(因为这些值不会随时间线性变化)。

然后你可以像得到 speedX 那样得到 xFromCenter,除了现在那里不需要速度,对 Y 做同样的事情。虽然我设置了X 为 cos,Y 为 sin,而不是相反——这是典型的用法,角度从右侧的 0 开始测量。 (区别只是旋转了 90 度。)

还有一个小问题:计算时可以使用MathUtils.sinDeg()cosDeg()函数,不需要转弧度并将结果转换回 float 。它更具可读性。

完整代码:

helper += speedVariable * delta;
xFromCenter = helper2 * MathUtils.cosDeg(helper));
yFromCenter = -1 * helper2 * MathUtils.sinDeg(helper));

setX(getCenterX() + xFromCenter + (Background.bg.getSpeedX() * 5));
setY(getCenterY() + yFromCenter);

您可能需要使用常量(helper2、speedVariable、-1 乘法)并可能取消 X 和 Y 的交换以获得您想要的,但这应该使对象在所有条件下都保持在一个圆上。

关于java - Delta-time lag compensation 弄乱了我的游戏 Spinner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439749/

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