Performance 滞后于deltaTime
我是一个游戏开发新手,我有一个问题,我正试图处理。我在一个使用JAVA的Android游戏中工作 情况是,我正在使用deltaTime在任何设备中进行平滑移动等,但我遇到了一个问题。在游戏的某个特定时刻,它实现了一个相当昂贵的操作,该操作会增加下一次迭代的增量。有了这个,下一次迭代会有点滞后,在旧的慢速设备中可能会非常糟糕 为了解决这个问题,我想到了一个解决方案,我想和大家分享一下,并对这个方案可能发生的情况给出一些反馈。算法如下所示:Performance 滞后于deltaTime,performance,game-engine,frames,Performance,Game Engine,Frames,我是一个游戏开发新手,我有一个问题,我正试图处理。我在一个使用JAVA的Android游戏中工作 情况是,我正在使用deltaTime在任何设备中进行平滑移动等,但我遇到了一个问题。在游戏的某个特定时刻,它实现了一个相当昂贵的操作,该操作会增加下一次迭代的增量。有了这个,下一次迭代会有点滞后,在旧的慢速设备中可能会非常糟糕 为了解决这个问题,我想到了一个解决方案,我想和大家分享一下,并对这个方案可能发生的情况给出一些反馈。算法如下所示: 1) Every iteration, the delta
1) Every iteration, the deltatime is added to an "average deltatime variable" which keeps an average of all the iterations
2) If in an iteration the deltaTime is at least twice the value of the "average variable", then I reasign its value to the average
有了这一点,游戏将适应设备的实际性能,并且不会滞后于具体的迭代
你觉得怎么样?我只是编出来的,我想更多的人会遇到这个问题,还有一个更好的解决方案。。。需要提示!谢谢有一种比存储平均值更简单、更准确的方法。我不相信你的建议能得到你想要的结果
- 取上一帧开始以来的总时间跨度(包括分数)-这是您的 增量时间。它通常是毫秒或秒
- 应用前,将移动速度乘以增量时间 它
让我们从上面的评论中考虑例子:
如果你有一帧需要1毫秒,而物体移动了10个单位 每帧以每毫秒10个单位的速度移动。然而,如果 一帧需要10毫秒,你的物体会减慢到每毫秒1个单位- 在第一帧中,我们将速度(10)乘以1(增量时间)。这给了我们10的速度
- 在第二帧中,我们的增量是10-帧的速度慢了十倍。如果我们把速度(10)乘以delta(10),我们得到100。这与物体在1ms帧中移动的速度相同
- 人工智能程序,比如路径
- IO操作,如磁盘/网络访问
- 程序资源的生成
- 物理学李>
- 任何其他不呈现代码的内容
最后一个想法:增量时间的概念是将游戏规则与正在运行的硬件断开连接-您的解决方案使用增量商重新连接它们每一帧都不是为了平滑移动,而是为了确保用于在帧之间移动项目的标量度量(速度是一个很好的示例)提供一致的结果,不考虑实际帧率(由GPU和CPU决定)。例如,如果有一帧需要1ms,而每帧移动10个单位的对象正以每毫秒10个单位的速度移动。然而,如果一帧需要10毫秒,你的物体会减慢到每毫秒1单位。这可能有助于你记忆。Delta是字母“D”的奇特的陆军英雄语音。从数学上讲,D在这个例子中代表持续时间,我可能解释错了。我已经在用速度等方法做了。问题是,在第二次迭代中,在需要10毫秒的迭代中,当对象在一次迭代中移动100时,它看起来很滞后,因为在一次迭代中移动了很多。我知道它使用的速度与10次1毫秒的迭代速度相同,但是因为它在一次迭代中移动了很多距离,所以移动太多,产生了问题。我在寻找解决办法。是的。。。我会尽可能地优化,但你不认为我写的解决方案可行吗?它很简单,看不到太多问题。游戏中没有太多的东西在移动,因此如果我因为一次迭代而浪费时间,我不介意在下一次移动中浪费时间。@Frion3L我认为您可能会从用户的角度放大对问题的看法。你是否曾经经历过流媒体音频延迟,并让它以4倍的速度播放以赶上?这就是问题所在。即使有滞后,游戏也不应该以快速的动作赶上时间。我认为它应该以与正常迭代相同的速度运行。@Frion3L您的解决方案将为您提供类似于您所追求的结果。祝你好运