移动不受FPS影响的对象

时间:2015-10-09 00:05:46

标签: java android libgdx

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

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%同步非常重要,因为我想测量对象到达某个点所需的时间。

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

2 个答案:

答案 0 :(得分:2)

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

enter image description here

open the picture in full size!

虽然你在2FPS时每秒增加一些值x两次,但是比拥有1FPS时的值小两倍意味着在每个整数时间点对象的x将是相同的

你害怕的情况如果你不能将它乘以delta那么真实 - 那么你在2FPS时每秒增加相同的值就比在1FPS时增加两倍 - 这意味着在一秒之后当拥有2FPS时,对象将比使用1FPS 时多两倍。

只有受FPS影响的是渲染平滑度 - 但如果你刷新屏幕的次数是两倍,那么显然会更加流畅。

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

答案 1 :(得分:0)

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