gpt4 book ai didi

algorithm - 您如何将游戏逻辑与显示分开?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:07 27 4
gpt4 key购买 nike

如何使每秒显示帧数独立于游戏逻辑?这样一来,无论视频卡的渲染速度有多快,游戏逻辑都以相同的速度运行。

最佳答案

我认为这个问题揭示了对游戏引擎应该如何设计的一些误解。这完全没问题,因为它们是非常复杂的东西,很难做对 ;)

您的正确印象是您想要所谓的帧速率独立性。但这不仅仅指渲染帧。

单线程游戏引擎中的帧通常称为 Tick。您处理输入、处理游戏逻辑并根据处理结果渲染帧的每个 Tick。

您想要做的是能够以任何 FPS(每秒帧数)处理您的游戏逻辑并获得确定性结果。

在以下情况下这会成为一个问题:

检查输入: - 输入是关键:'W' 表示我们将玩家角色向前移动 10 个单位:

playerPosition += 10;

现在,由于您每帧都这样做,如果您以 30 FPS 的速度运行,您将每秒移动 300 个单位。

但如果您以 10 FPS 的速度运行,则每秒只能移动 100 个单位。因此您的游戏逻辑与帧率无关。

幸运的是,解决这个问题并使您的游戏逻辑与帧速率无关是一项相当简单的任务。

首先,您需要一个计时器来计算每帧渲染所花费的时间。这个以秒为单位的数字(所以 0.001 秒完成一个 Tick)然后乘以你想要的帧速率独立。所以在这种情况下:

按住'W'时

playerPosition += 10 * frameTimeDelta;

(Delta 是“改变某事”的奇特词)

因此您的玩家将在单个 Tick 内移动 10 的一小部分,并且在整整一秒的 Tick 后,您将移动完整的 10 个单位。

但是,对于变化率也随时间变化的属性,例如加速的车辆,这会下降。这可以通过使用更高级的集成器来解决,例如“Verlet”。

多线程方法

如果您仍然对您的问题的答案感兴趣(因为我没有回答它但提供了替代方案),请看这里。将游戏逻辑和渲染分离到不同的线程中。它有它的缺点。足以让绝大多数游戏引擎保持单线程。

这并不是说在所谓的单线程引擎中只有一个线程在运行。但所有重要任务通常都在一个中心线程中。像碰撞检测这样的东西可能是多线程的,但通常 Tick 的碰撞阶段会阻塞,直到所有线程都返回,并且引擎返回到单个执行线程。

多线程提出了一大类问题,甚至是一些性能问题,因为一切,甚至容器,都必须是线程安全的。游戏引擎是一开始就非常复杂的程序,因此不值得为它们增加多线程复杂性。

固定时间步长方法

最后,正如另一位评论者指出的那样,拥有固定大小的时间步长并控制“步进”游戏逻辑的频率也是一种非常有效的处理方式,具有很多好处。

链接在这里是为了完整性,但其他评论者也链接到它: Fix Your Time Step

关于algorithm - 您如何将游戏逻辑与显示分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com