【问题标题】:Moving an object unaffected by FPS移动不受 FPS 影响的对象
【发布时间】:2015-10-09 00:05:46
【问题描述】:

您好,我目前正在尝试在我的 libgdx android 应用程序中移动对象。主要问题是我无法移动不受 fps 影响的对象。到目前为止,我一直在使用这样的增量时间:

public void move(float delta){
    this.setX(this.getX() + this.speed.x * delta); //moving just along x axis to keep it simple
    this.speed.x += 1 * delta //some acceleration;
}

每帧都会调用 move 方法。想象一下我有两个设备,一个是 1fps,一个是 2fps,现在我们移动一个对象 1 秒,起始速度为零。该对象不会在第一个设备上移动,而在第二个设备上会移动。 总而言之,如果 fps 增加,物体的移动速度会稍微快一些。

到目前为止,这个微小的差异没有问题,但在这种情况下,物体 100% 同步移动很重要,因为我想测量物体到达某个点所需的时间。

那么去这里的正确方法是什么?

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    实际上...当您将对象乘以 delta 时移动对象的方式已经使其与 FPS 无关:) 让我们看下图以更好地理解它:

    open the picture in full size!
    

    虽然您在 2FPS 时每秒两次向 x 添加一些值,但该值比 1FPS 时小两倍,这意味着 在每个整数时间点,对象的 x 都将相同强>.

    如果您不将其乘以 delta,那么您所害怕的情况将会是真实的 - 那么在 2FPS 时,您每秒将添加相同的值两次,而不是在 1FPS 时 - 这意味着在一秒钟后 具有 2 FPS 时的对象将是具有 1 FPS 时的两倍

    唯一受 FPS 影响的是渲染平滑度 - 但如果您将屏幕刷新两次,显然会更平滑。


    顺便说一句 - 如果您正在使用 Scene2D 并寻找其他一些移动对象的方法,请查看 Actions,尤其是 MoveToAction。查看this tutorial 以获取一些信息。

    【讨论】:

    • 感谢您的回答!您是对的,对于恒定的速度它没有任何区别,但是随着速度的变化它确实如此。包括我的代码中的加速度,结果将是对象移动得越快,fps 越高。
    • 好的,我明白了 - 那么您似乎在使用错误的方程式进行恒定加速度的运动 - 查看这个主题:stackoverflow.com/questions/14271232/… 及其接受的答案
    【解决方案2】:

    感谢 m.antkowicz 提供的信息,我可以做一些更好的研究并找到一些有趣的文章。根据我的current knowlege,使用基于 deltatime 的动态加速移动对象非常困难。正确的做法是使用fixed time stamps

    【讨论】:

      猜你喜欢
      • 2017-12-03
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 2018-04-19
      相关资源
      最近更新 更多