2011-02-23 41 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主題,現在遊戲運行的很好,很流暢。