XNA 如何保持一致且精确的 60 FPS 帧速率?此外,它如何在不将 CPU 保持在 100% 的情况下保持如此精确的计时?
最佳答案
虽然 luke 上面的代码在理论上是正确的,但使用的方法和属性并不是最佳选择:
- 由于
DateTime.Now
的精度仅为 30 毫秒左右(请参阅 C# DateTime.Now precision 并给出或采用 20 毫秒),不建议将其用于高性能计时(60 FPS 为 16 毫秒)。 System.Diagnostics.Stopwatch是the timer of choice for real time .NET Thread.Sleep
遇到同样的精度/分辨率问题,不能保证只在指定时间内休眠
当前的 XNA FX 似乎挂接到 Windows 消息循环并执行其内部预更新每一步并调用 Game.Update
仅当自上次更新以来耗时与指定的帧速率匹配时(例如,默认设置为每 16 毫秒)。如果您想真正了解 XNA FX 如何完成这项工作 Reflector是你的 friend :)
随机花絮:在 XNA GameStudio 1.0 Alpha/Beta 时间框架中,有很多关于“完美的 WinForms 游戏循环”的博客文章,尽管我现在找不到它们......
关于c# - XNA 时序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795693/