【问题标题】:Delta-time lag compensation messing up my Spinner for my gameDelta 时间延迟补偿让我的 Spinner 搞砸了我的游戏
【发布时间】:2014-05-03 03:03:11
【问题描述】:

在我的游戏中,我有一个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 是 cosine 和 sine 函数内部的字段,使微调器旋转

speedVariable 控制旋转速度

helper2 设置它的旋转半径

我做错了吗?谢谢!

【问题讨论】:

    标签: java libgdx lag delta


    【解决方案1】:

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

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

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

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

    helper += speedVariable * delta;
    

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

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

    还有一件小事:计算时可以使用MathUtils.sinDeg()cosDeg() 函数,因此不需要转换为弧度并将结果转换回浮点数。它更具可读性。

    整个代码:

    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 的交换以获得您想要的结果,但这应该使对象在所有条件下都保持在一个圆圈上。

    【讨论】:

    • 非常感谢!使用您的建议后效果很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多