XNA Update()函数的更新率在不同的机器上差异很大

XNA Update()函数的更新率在不同的机器上差异很大,xna,emulation,Xna,Emulation,我正在用XNA编写一个模拟器。模拟器的精度在很大程度上取决于真实的fps。每秒的fps必须为60。虽然微软声称他们的更新功能是固定时间设置的,在我的emulator(或一个空白的XNA 4.0刷新项目)中每秒应该准确调用60次,但到目前为止,我使用不同的处理器收集了这些值:AMD athlon 2x 6000(非同步处理器,需要AMD额外优化更新才能正确运行)60-61 tps。英特尔i5(我想是2.8)55tps。在一台旧的联想笔记本电脑上,速度较慢的迅驰59-60tps(理想型号)。旧的英特

我正在用XNA编写一个模拟器。模拟器的精度在很大程度上取决于真实的fps。每秒的fps必须为60。虽然微软声称他们的更新功能是固定时间设置的,在我的emulator(或一个空白的XNA 4.0刷新项目)中每秒应该准确调用60次,但到目前为止,我使用不同的处理器收集了这些值:AMD athlon 2x 6000(非同步处理器,需要AMD额外优化更新才能正确运行)60-61 tps。英特尔i5(我想是2.8)55tps。在一台旧的联想笔记本电脑上,速度较慢的迅驰59-60tps(理想型号)。旧的英特尔p4超线程也是如此;正好60 tps。在DELL实施中(不记得cpu),它是52-53 tps。 那我该怎么办呢。计时器在不同线程上的精度也很糟糕。此外,update函数也将被并行调用(使用几乎100%的cpu)。
为每个cpu创建不同的配置文件?(假设tps,[每秒次数]计数正确)

更新方法调用不正确。在PC上,它们将尝试每秒制作60次,但这取决于机器和游戏逻辑

您可以通过检查游戏上的
GameTime.isrunningslowy
属性()来检查系统是否工作得比应该的慢

此外,您还可以修改它每秒发出的滴答声,例如,一个手机项目以每秒33次的滴答声开始,而一个普通的
Windows游戏
项目为每秒60次

检查
GameTime
是明智的,它不会解决您的问题,但您将更好地了解
Update
方法的工作原理,并可能了解如何解决问题

我在这里引用他的部分帖子:

默认情况下,XNA以固定的时间步长模式运行,并使用TargetReleasedTime 每秒60帧。这提供了一个简单的保证:•我们将 每秒准确调用您的更新方法60次•我们将调用您的 只要我们愿意,就用画法

深入研究这到底意味着什么,你会发现 根据更新和绘制的时间长短,有几种可能的情况 方法执行所需的时间

最简单的情况是,您花在更新上的总时间+ 平局正好是1/60秒。在这种情况下,我们将调用Update, 然后打电话给Draw,然后看着时钟,注意到是时间了 再次更新,然后绘制,等等。简单

如果你的更新+绘制时间少于1/60秒怎么办?阿尔索 简单。这里我们叫更新,然后叫抽签,然后看时钟, 请注意,我们还有一些剩余的时间,所以等着玩弄我们的电脑吧 用拇指按住,直到再次调用Update

如果更新+绘制时间超过1/60秒怎么办?这是 事情变得复杂的地方。这可能是有很多原因的 发生: 1.电脑速度可能稍慢,无法以所需速度运行游戏。 2.或者电脑速度太慢,无法以所需速度运行游戏! 3.计算机可能基本上足够快,但由于某种原因,这个特定的帧可能花费了异常长的时间。也许 屏幕上有太多的爆炸,或者游戏必须加载一个 新的纹理,或者有垃圾收集。 4.您本可以在调试器中暂停程序

我们做同样的事情来回应所有四个缓慢的原因:•设置 GameTime.isRunningslow为true。•额外呼叫更新次数(无需 打电话(抽签)直到我们赶上如果事情变得荒谬 我们太落后了,我们只是放弃。


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

谢谢。我不知道这是否无关紧要,但在一个单独的无上限循环中,我得到400-450fps。这意味着1个模拟的机器时钟最多只执行2.5ms。此外,我完全删除了CPU模拟,但它给了我相同的结果(61 fps)。关于isrunningslow,我经常在Update函数中启用它。但是2-3毫秒的延迟是否足以打开它?我的意思是,程序员在游戏中添加一些耗时的函数是很正常的,但仍然希望它以60tps的速度运行。你说你的isrunningslow是什么意思?该属性用于系统告诉您是否正确调用了update方法,而不是相反!对不起,我将重新措辞。我检查了Game类的IsRunningSlowly属性,大多数情况下都是这样:)XNA的一个典型错误是每次都在屏幕上绘制所有内容,而不是上次绘制调用的更改,请确保您没有这样做。除此之外,我什么也没想到。实际上,由于输出窗口一直显示“True”,所以游戏运行得很慢。我用另一种方法检查了它,现在它总是假的。尽管如此,游戏的运行速度为60-61 fps,i5为55 fps,戴尔为52 fps。。。