好的,我的游戏即将完成,一切都在其中运行良好,并且在我的计算机上运行得相当好(运行在大约 99Mb 的 RAM 上)。但是当我在我的 xBox 上运行它时,我往往会偶尔对主要玩家角色感到不安。我的游戏中确实有爆炸和广告牌效果,但是我在 xBox GPU 上进行所有渲染(这最初是在发生爆炸时引起抖动,但现在不再)。抖动也是随机的,而不是在我生成大量单位或执行大量动作时。我不知道为什么会这样,有什么想法吗?
Ps 游戏确实集成了多线程,在一个线程上更新,在另一个线程上渲染。
好的,我的游戏即将完成,一切都在其中运行良好,并且在我的计算机上运行得相当好(运行在大约 99Mb 的 RAM 上)。但是当我在我的 xBox 上运行它时,我往往会偶尔对主要玩家角色感到不安。我的游戏中确实有爆炸和广告牌效果,但是我在 xBox GPU 上进行所有渲染(这最初是在发生爆炸时引起抖动,但现在不再)。抖动也是随机的,而不是在我生成大量单位或执行大量动作时。我不知道为什么会这样,有什么想法吗?
Ps 游戏确实集成了多线程,在一个线程上更新,在另一个线程上渲染。
听起来垃圾收集器正在引起您的不安。在 Xbox 上,每次分配 1MB 数据时它都会启动。花费的时间取决于程序中使用了多少引用。
使用Xbox 360 的 XNA Framework 远程性能监视器来判断您是否有垃圾收集问题。阅读Shawn Hargreaves如何判断您的垃圾收集是否太慢。
如果确实有垃圾收集问题,则需要一个分析器来确定哪些对象正在生成垃圾。.NET Framework 2.0的CLR Profiler是一种选择。默认情况下,XNA 4.0 不支持它,但 Crappy Coding 上的 Dave 有一个解决方法。有关解决垃圾收集问题的策略,请阅读Shawn Hargreaves 的垃圾收集 Nirvana 的双路径。
更新:.NET Framework 4.0的CLR Profiler现在可用。
听起来您的渲染线程只是坐在那里等待更新线程完成导致“抖动”的工作。也许放入一些代码来记录一个线程在被允许访问另一个线程之前必须等待多长时间,以确定这是否真的是问题所在。