XNA Update()函数更新率,在不同的机器上变化很大

时间:2014-07-26 11:16:59

标签: xna emulation

我在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,[每秒的时间]计数是正确的)

1 个答案:

答案 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)直到我们赶上•如果事情变得荒谬可笑   我们太落后了,我们放弃了。

如果这对您没有帮助,那么发布一些显示您认为可能会使流程变慢的代码会有所帮助。