2011-02-23 83 views
5

我是C Sharp的新手,并且撰写了一个带有XNA框架的游戏。我创建了一个项目,它是“Platformer”XNA入门套件的重大修改版本。XNA平台游戏(2D) - 帧率/ FPS波动

我看到(貌似)随机波动的帧率。有时它会一直以60 FPS的速度运行,有时会以60 FPS开始,然后下降到49-52,而其他时间则会立即下降到49-52。使用Fraps显示帧速率(不记录视频到磁盘)。

这个游戏的独特性要求它始终以60 FPS运行。

因此,似乎一些竞争条件或随机因素导致exe文件单独运行之间的差异。许多重建都没有区别。

都出现我的台式机和笔记本电脑完全相同的频率上的这种波动,所以它不是一个问题瓦特/硬件,抗病毒等

我搜索有关如何在XNA锁定的帧率,我的代码似乎正在做大量的工作,包括尝试以60 FPS进行钳制(使用IsFixedTimeStep,SynchronizeWithVerticalRetrace)。

这款游戏始终能够达到60 FPS,我始终能够看到它。当它以60 FPS运行时,根据我所知,它不会对CPU,RAM或任何其他资源征税。

其他人都遇到过吗?

谢谢, - S

+1

您可以使用FRAPS的帧时间设置收集更多数据吗?另外:如果您使用垂直同步,并且放下一帧,您的帧速率将立即减半。如果它在几分之一秒内完成,那么报告的帧速率将在30到60 FPS之间。 – 2011-02-23 13:55:03

+0

“这款游戏的独特性要求它始终以60 FPS运行。”真?我很好奇这是什么原因。 – Justin 2011-02-24 20:05:47

回答

2

您所描述的不一致性意味着问题或者由

  • 的环境因素引起的,例如另一种方法;或
  • 未采取在每个游戏中的一个代码路径运行

最可能的原因是这两台计算机上运行的另一个进程。

关闭媒体播放器等所有非必要流程。 Windows Media Player和iTunes可以在播放时降低帧率。 Fraps应该可以,只要它不记录,但我会实施你自己的内置FPS显示器来确保。

使用windows性能监视器来检查是否有消耗CPU或内存的进程。尤其是查看您的游戏未能正常关闭并仍在后台运行的实例。

你可以尝试缩小的环保事业其他的事情包括:

  • 确定,如果比赛在60fps 干净重启后运行
  • 确定是否 游戏总是在对 60fps的运行第一次运行
  • 从 explorer开始游戏而不是visual studio
  • 确定是在Release还是 调试模式有任何影响
  • 运行您的 游戏朋友的电脑上

如果原因是从没有在每个执行你的游戏里面的代码路径运行,你可以:

  • 反复玩,并试图确定你在游戏中做什么,触发减速。
  • 实现输入录制和播放系统,以便通过游戏相同的运行是完全重复
  • 配置您的垃圾收集和综合性能,以寻找那些脱颖而出
1

我会检查是否这些任何问题周期性减速与GC事件相一致,特别是1代或2代。从您所描述的情况来看,这似乎很合理。如果是这样,看看是否可以通过重用,堆栈分配等方式减少代码中的对象流失。

0

您可以完全避开这个问题。只要您的游戏运行速度至少为35 fps,帧速下降就不会被人眼所察觉。为了回避这个问题,确保所有更新代码都考虑到它传递的GameTime对象。通常情况下,你会乘以任何计算结果,以便在帧速率较高时计算较小的计算结果,并且在游戏更新缓慢时得到更加明显的结果。总的来说,它会让你的游戏画面看起来更加流畅。

你有没有试过让游戏运行在最大帧率下?如果是这样,你仍然收到巨大的帧率下降?如果你不知道如何做到这一点,我可以在我回家后发布代码,如果你需要的话。

0

尝试禁用V同步SynchronizeWithVerticalRetrace=false并查看是否有帮助。如果事件发生在同步时间或者帧的渲染时间稍长,因为它必须等待下一次同步,否则V同步具有显着降低帧速率的令人讨厌的副作用。但是,您可能会遇到撕裂。但是,如果帧速率稳定比撕裂自由显示更重要,那可能是一个很好的折衷。

0

您是否在可见区域之外绘制任何东西?我有同样的问题(帧率会突然下降)。在尝试了所有事情后,我有时会在可见区域外面或屏幕可见区域和不可见区域之间绘制东西。鉴于你正在使用平台初学者工具包,这可能也是你的问题。

0

您将永远无法强制游戏以60 fps运行。

如果游戏确实需要以这个速度运行,那么您可能会更新每帧的游戏状态。如果是这样,您应该将其更改为需要花费时间的更新。

1

我有完全相同的问题。我创建了一个基于Platformer入门套件的游戏,并使用Windows 7.该程序大多数时间以60 FPS运行,但有时它会下降到52 FPS约30秒,然后它会运行回到60 FPS。

我发现通过关闭Windows 7 Aero功能,我的游戏现在一直保持在60 FPS。我不得不转换到没有Aero的Windows 7 Basic主题,现在游戏运行的很好,很流畅。