在游戏的背景下实时

时间:2012-03-27 18:12:47

标签: real-time frame-rate

我有一个问题,即实时概念(IMO命名不同,在不同的上下文中有不同的含义)。我将实时软件理解为时间是关键变量的软件。事件必须在给定时间发生。比如说,铁路开关在15:02改变,下一个必须在15:05,无论如何。

但这个例子怎么样。在游戏中,当玩家的FPS低于16个游戏退出并告诉用户升级他的硬件或杀死其他应用程序时。因此,当游戏循环的一次迭代花费超过1/16秒时,程序的输出就会完全不同。

是实时(ish)吗?它可以被视为实时计算吗?

2 个答案:

答案 0 :(得分:2)

您的问题很难理解,您是指实时计算,还是模拟实时或完全不同的东西?

模拟实时:可以通过轮询事件来模拟游戏中的实时。存储事件的时间,然后当渲染帧时,游戏应该通过将当前时间移动到下一个事件的时间并处理事件来反复“快进”。这应该重复,直到没有更多的事件,或时间是'当前'。

这要求您根据当前时间计算任何时间函数(如速度,位置,加速度)。这意味着您不会定期更新这些属性,并允许您的游戏具有确定性,因为“游戏时间”不再依赖于实时。它还可以使游戏速度和暂停等内容变得非常简单。

如果您指的是实时系统的概念,那么我会说没有足够的信息来确定“游戏循环”是否是“实时”。这取决于游戏的操作环境以及“游戏循环”中的逻辑。根据维基百科,a real-time deadline must be met, regardless of system load

答案 1 :(得分:2)

在快速接近的规范性文章Fix your Timestep!中,格伦菲尔德解决了许多处理这个问题的方法。虽然本文主要关注物理学,但关键点适用于任何代表时间函数的系统,即处理移动物体的事物。

该文章的执行摘要(值得一读)是:

通过使用离散物理时间步长,您可以使物理确定性(很好,可以通过不完美的输入实现)。它看起来像这样:

  • 尽可能快地渲染
  • 传入一个时间差值,表示之前的步数占用此帧的时间
  • 处理增量时间模数时间步数物理步骤数
  • 将您无法处理的delta的剩余部分存储在累加器中

该累加器被添加到下一帧的时间缓冲区。这需要一些微调,以便由于例如由于例如一个快速旋转的玩家(随着时间的推移需要大量的能见度确定)不会最终让你陷入不可避免的时间债务。如果您想要智能地防止这种情况发生,您可以让哨兵寻找危险的累积时间级别,您可以通过丢弃视频帧来响应。

使用离散时间步长的另一个好处是它们在多人游戏中表现良好。如果您具有对等配置中的权威服务器或节点,则服务器可以确保所有客户端的物理模拟都在相同的物理时间线上运行。离散时间块还简化了基于回滚的多人游戏中的内容。

编辑:

免责声明:我自己从未编写过实时软件,只在一家公司工作过!

为了回应真实的真实实时软件,任何人都不可能制作一款可以满足这一要求的游戏,至少在软件方面是如此。 (我不确定如何在ROM上运行游戏或者不在主机操作系统下运行的游戏?)虽然你的例子是实时软件的尝试,但大多数是实时的软件经过一段时间的认证,其中确定了每条指令或逻辑操作块所花费的最大时间。从某种意义上说,游戏可能会接近这一点,例如,平台许可方有关于最低30fps或类似的要求(我相信XBLA)。但是,这些认证通常是通过一段时间的测试而不是通过数学证明来确定的。