我在XNA中编写模拟器。仿真器的准确性在很大程度上取决于真正的fps。 fps必须是每秒60。虽然微软在固定时间设置中声称他们的更新功能,应该被称为每秒60 每秒,在我的模拟器(或空白的XNA 4.0刷新项目)中,我已经收集了这些值到目前为止,使用不同的处理器:AMD athlon 2x 6000(未提供的,需要AMD的额外优化更新才能正常运行)60-61 tps。英特尔i5(2.8我认为)55tps。在旧的联想笔记本电脑上使用慢速centrino 59-60tps(所需的一个)。旧的英特尔p4超线程也是如此;正好是60 tps。在DELL实现(不记得cpu)上,它是52-53 tps。 所以我该怎么做。计时器在单独线程上的准确性也很可怕。此外,更新功能也将被并行调用(使用几乎100%的cpu)。 为每个cpu创建一个不同的配置文件? (假设tps,[每秒的时间]计数是正确的)
答案 0 :(得分:2)
Update
方法调用不是100% fixed。在PC上,他们将每秒尝试 60次,但这取决于机器和游戏的逻辑。
您可以通过查看游戏中的GameTime.IsRunningSlowly
属性(link here)来检查系统是否运行缓慢。
此外,您可以修改它每秒生成的刻度线,例如电话项目以每秒33个刻度开始配置,相对于正常Windows Game
项目中的60个。
检查关于GameTime
的{{3}}是明智的,它不会解决您的问题,但您会更好地了解Update
方法的工作方式,也许可以获得关于如何解决问题的想法。
我在这里引用他的部分内容:
默认情况下,XNA以固定时间步长模式运行,具有TargetElapsedTime 每秒60帧。这提供了一个简单的保证:•我们会 每秒拨打你的更新方法60次•我们会打电话给你 每当我们想要的时候画出方法
深入研究这意味着什么,你会意识到存在 几种可能的场景取决于您的更新和绘制时间 方法需要执行。
最简单的情况是您在Update +中花费的总时间 平局恰好是1/60秒。在这种情况下,我们将调用Update, 然后调用Draw,然后查看时钟并注意它是时候了 另一个更新,然后绘制,等等。简单!
如果你的更新+抽奖花费不到1/60秒怎么办?也 简单。在这里我们调用Update,然后调用Draw,然后查看时钟, 请注意我们还剩下一些时间,所以请等待我们 拇指,直到再次调用更新。
如果Update + Draw花费的时间超过1/60秒怎么办?这是 事情变得复杂。这可能有很多原因 发生: 1.计算机可能稍慢,无法以所需的速度运行游戏。 2.或者计算机可能太慢而无法以所需的速度运行游戏! 3.计算机可能基本上足够快,但由于某种原因,这个特定的框架可能需要非常长的时间。也许 屏幕上爆炸太多,或者游戏不得不加载 新纹理,或有垃圾收集。 你可以在调试器中暂停程序。
我们做同样的事情以回应所有四个缓慢的原因:•设置 GameTime.IsRunningSlowly为true。 •呼叫更新额外时间(没有 呼叫Draw)直到我们赶上•如果事情变得荒谬可笑 我们太落后了,我们放弃了。
如果这对您没有帮助,那么发布一些显示您认为可能会使流程变慢的代码会有所帮助。