经过一段时间的开发游戏,我已经接触到两种可变帧速率(你可以计算出自上次刻度以来已经过了多少时间并相应地更新了演员的运动)和固定的帧速率(你可以计算出多少时间)已经通过并选择要么勾选一段固定的时间,要么一直睡到下一个窗口来.
哪种方法最适合特定情况?请考虑:
小智 5
我倾向于可变帧率模型,但在内部某些系统是在固定时间步长上打勾的。使用时间累加器很容易做到这一点。物理学是一个最好在固定时间步长上运行的系统,如有必要,每帧会打勾多次,以避免失去稳定性并保持模拟流畅。
一些代码来演示累加器的使用:
const float STEP = 60.f / 1000.f;
float accumulator = 0.f;
void Update(float delta)
{
accumulator += delta;
while(accumulator > STEP)
{
Simulate(STEP);
accumulator -= STEP;
}
}
Run Code Online (Sandbox Code Playgroud)
这无论如何都不是完美的,但提供了基本思想 - 有很多方法可以改进这个模型。显然,当输入帧率非常慢时,有一些问题需要解决。然而,最大的优势是无论增量多快或多慢,模拟都在“玩家时间”中以平滑的速度移动——这是用户会察觉到任何问题的地方。
一般来说,我不会涉足图形和音频方面,但我认为它们不会像物理、输入和网络代码那样受到影响。
似乎大多数 3D 开发人员更喜欢可变 FPS:Quake、Doom 和 Unreal 引擎都会根据系统性能进行缩放。
如果您正在编写一款性能很重要的网络 3D 游戏,我不得不说,咬紧牙关并实现可变帧速率。
如果这是一款 2D 益智游戏,您可能可以使用固定的帧速率,也许可以针对超慢的计算机和明年的模型进行稍微参数化。
| 归档时间: |
|
| 查看次数: |
11865 次 |
| 最近记录: |