繁体   English   中英

XNA Platformer(2D) - 帧速率/ FPS波动

[英]XNA Platformer (2D) - Framerate/FPS fluctuations

我是C Sharp的新手,并且正在编写一个带有XNA Framework的游戏。 我创建了一个项目,它是“Platformer”XNA入门套件的一个经过大量修改的版本。

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

这款游戏的独特之处在于它始终以60 FPS的速度运行。

所以似乎一些竞争条件或随机因素导致exe的各个运行之间的差异。 无数的重建没有任何区别。

这种波动在我的台式机和笔记本电脑上以完全相同的频率发生,因此它不是硬件,防病毒等问题。

我已经搜索了如何在XNA中锁定帧速率,我的代码似乎正在做很多需要做的事情,包括尝试钳制60 FPS(使用IsFixedTimeStep,SynchronizeWithVerticalRetrace)。

游戏从头到尾绝对能够达到60 FPS,我一直都在看。 当它以60 FPS运行时,就我所知,它不会对CPU,RAM或任何其他资源征税。

有人经历过这个吗?

谢谢, - S.

您描述的不一致意味着问题是由

  • 环境因素,如另一个过程; 要么
  • 游戏中的代码路径,不会在每次运行时使用

最可能的原因是在您的计算机上运行的另一个进程。

关闭所有非必要的流程,如媒体播放器。 Windows Media Player和iTunes都可以在播放时降低帧速率。 Fraps应该没问题,只要它没有录制,但我会实现你自己的内置FPS显示只是为了确定。

使用Windows性能监视器检查是否有进程消耗cpu或内存。 特别要查找未能正常关闭且仍在后台运行的游戏实例。

您可以尝试缩小环境原因的其他事项包括:

  • 确定游戏是否在干净重启后以60fps运行
  • 确定游戏在第一次运行时是否始终以60fps运行
  • 从资源管理器而不是视觉工作室启动游戏
  • 确定在Release或Debug模式下运行是否有任何影响
  • 在朋友的电脑上运行游戏

如果原因来自游戏中的代码路径,并且每次运行都没有执行:

  • 反复播放并尝试确定你在游戏中做什么导致减速。
  • 实现输入录制和回放系统,以便在游戏中运行完全可重复
  • 描述您的垃圾收集和一般性能,以寻找突出的任何问题

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

我有同样的问题。 我创建了一个基于Platformer入门套件的游戏,我使用的是Windows 7.该程序大部分时间以60 FPS的速度运行,但有时它会下降到52 FPS大约30秒,然后它会去回到60 FPS。

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

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

您是否尝试过允许游戏以最大帧速率运行? 如果是这样,你还会收到巨大的帧率下降吗? 如果你不知道怎么做,我可以在你回家时发布代码,如果你需要的话。

尝试禁用V sync SynchronizeWithVerticalRetrace=false并查看是否有帮助。 如果事件在同步时发生或者帧有时太长而无法渲染,V同步会产生令人讨厌的副作用,即大幅降低帧速率,因为它必须等待下一次同步。 但是,您可能会经历撕裂。 但是,如果帧率稳定性比撕开自由显示更重要,那么这可能是一个很好的折衷方案。

你在可见区域以外的任何地方画画吗? 我有同样的问题(帧率会突然下降)。 在尝试了一切之后,事实证明我有时会在可见区域之外或在屏幕的可见区域和不可见区域之间画一些东西。 鉴于您正在使用平台游戏初学者套件,这可能也是您的问题。

你永远无法强迫游戏以60 fps的速度运行。

如果游戏真的需要以这个速度运行,你可能会更新每帧的游戏状态。 如果是这样,您应该将其更改为考虑经过时间的更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM