Questions tagged «fixed-timestep»

11
什么时候应该使用固定或可变时间步长?
游戏循环应该基于固定时间段还是可变时间段?一个人永远是上等的,还是正确的选择会因游戏而异? 可变时间步长 物理更新传递了“自上次更新以来经过的时间”参数,因此与帧速率有关。这可能意味着要进行计算position += distancePerSecond * timeElapsed。 优点:流畅,更易于编码 缺点:不确定性,无论步长或步长都是不确定的 deWiTTERS示例: while( game_is_running ) { prev_frame_tick = curr_frame_tick; curr_frame_tick = GetTickCount(); update( curr_frame_tick - prev_frame_tick ); render(); } 固定时间步 更新可能甚至不接受“经过的时间”,因为它们假定每次更新都是在固定的时间段内进行的。计算可以按进行position += distancePerUpdate。该示例包括渲染期间的插值。 优点:可预测,确定性(更容易进行网络同步?),更清晰的计算代码 缺点:不同步以监控垂直同步(除非进行插值,否则会引起抖动的图形),最大帧速率受限(除非进行插值),难以在框架内工作采取可变的时间步长(例如Pyglet或Flixel) deWiTTERS示例: while( game_is_running ) { while( GetTickCount() > next_game_tick ) { update(); next_game_tick += SKIP_TICKS; } interpolation …

5
游戏循环中更新独立渲染的目的是什么?
游戏循环中有许多文章,书籍和讨论。但是,我经常碰到这样的事情: while(running) { processInput(); while(isTimeForUpdate) { update(); } render(); } 这种方法基本上困扰我的是“独立于更新”的渲染,例如,在完全没有变化的情况下渲染帧。所以我的问题是,为什么经常教这种方法?

2
如何在两个游戏状态之间进行插值?
创建在两个更新状态之间插值所有对象位置的系统的最佳模式是什么? 更新将始终以相同的频率运行,但是我希望能够以任何FPS渲染。因此,无论每秒帧数是低于还是高于更新频率,渲染都将尽可能平滑。 我想将1帧更新为从当前帧到将来帧的将来插值。这个答案有一个讨论此操作的链接: 半固定或全固定时间步长? 编辑:如何在插值中使用最近和当前速度?例如,仅使用线性插值,它将在位置之间以相同的速度移动。我需要一种方法来对两点之间的位置进行插值,但是要考虑到插值在每个点的速度。这对于诸如粒子效果之类的低速率模拟将很有帮助。

6
用于插值和线程处理的数据结构?
我最近一直在处理游戏中的一些帧速率抖动问题,看来最好的解决方案是Glenn Fiedler(游戏开发人员)在经典的“ 修复您的时间步伐”中提出的解决方案!文章。 现在-我已经在使用固定的时间步进行更新。问题是我没有进行建议的插值渲染。结果是,如果渲染速率与更新速率不匹配,我将获得双倍或跳过的帧。这些可以在视觉上引起注意。 因此,我想在游戏中添加插值法-我很想知道其他人如何构建数据和代码来支持这一点。 显然,我将需要存储(在何处/如何?)与渲染器相关的游戏状态信息的两个副本,以便可以在它们之间进行插值。 另外-这似乎是添加线程的好地方。我想像一个更新线程可以在游戏状态的第三个副本上工作,而将其他两个副本保留为渲染线程的只读状态。(这是一个好主意吗?) 看来,有游戏的状态的两个或三个版本可能会引入性能和- 远更重要的是-可靠性和开发人员的生产力问题,相比于仅具有单一版本。因此,我对缓解这些问题的方法特别感兴趣。 我认为应该特别注意的是如何处理游戏状态中添加和删除对象的问题。 最后,似乎某种状态不是直接需要渲染的,还是要跟踪不同版本的状态太难了(例如,存储单个状态的第三方物理引擎)-因此,我想知道如何人们已经在这样的系统中处理了这类数据。

4
大型MMORPG多久更新一次物理?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 据我了解,大多数大型游戏使用固定的时间步进行稳定的模拟。 关于游戏服务器,它们施加哪个“帧速率”?或换一种说法,他们倾向于使用固定的时间步长? 我知道很多人会说:“尽快逃脱”。如果您有建立MMORPG的直接经验,我想知道这有多快。

1
使用sleep在单个线程中将逻辑/更新与渲染/绘制代码分开
我读过,游戏对象的速度不应该受到FPS的阻碍,而应该基于时间。如何分隔更新/绘制代码以在不限制绘制速率的情况下最大化性能,并提供基于时间的恒定逻辑更新速率? 我当前的伪代码如下 loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } 问题在于绘图代码阻碍了update()速率的性能。而且它消耗了100%的cpu,因为如果引发了睡眠,它将同时中断两个绘图/逻辑功能。 我也在使用SDL,它似乎没有vsync选项。我也听说过固定和可变时步的术语,但是我不确定用sleep()如何做到这一点。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.