我在寫一款使用C#2010和XNA 4.0的遊戲。我希望它是一個好遊戲,而不是一些「只是另一個垃圾」,所以我的目標之一是好幀率。爲此,我想問你一些建議,無論是XNA相關的還是C#相關的 - 我能做些什麼來加速我的代碼,從而提高FPS。XNA遊戲性能
下面是一些東西,我發現:使用array
insted的的list<>
將提高性能很多
- (C#),如果你想訪問數據(甚至許多數額巨大:具有陣列20000個物品給幾乎180%FPS使用
for
代替foreach
將提高性能的20000 - (C#)名單。在相同的20000元就好像5-10%的差異。
- (XNA和C#)調用方法性價比高,所以當我將代碼分散到meth中ods叫什麼其他方法等等,一切都非常酷,面向對象,每次調用1-3 FPS的成本。
- (xna)更新與繪製:當我將代碼放入update()和draw()時,性能沒有區別,所以如果您不太在意,則不必在update()而不是把所有東西放在一起畫()以期望更好的FPS。
- (xna)不知道它是我還是4.0,但是當你加載一個帶有很多紋理和相當複雜的網格的.X文件時,需要花費很多時間來加載。我不得不編寫自己的.X加載器和網格/模型渲染器,只是因爲XNA開始爲每個三角形加載紋理,而不管之前的紋理是否具有相同的紋理。即使編寫我自己的爲內容緩存紋理的內容加載器也不是解決方案,因爲它仍然被大量使用。如果你製作的東西不錯而蓬鬆,我建議使用
drawuserprimitives
而不是Model
類。 (不知道它是4.0還是3.1也有這樣的性能問題) - (xna和c#)儘量避免在繪圖時使用「new」。我在網上看到了一些代碼,複製/粘貼了什麼,並且有「basicEffect = new BasicEffect(graphicsDevice);」和draw()中的這種醜陋,甚至更糟糕:在draw()中的迭代中。這樣會殺死性能。而不是在「遊戲」或靜態類中有一個這樣的類。這也適用於其他「臨時對象」:醜陋,但我認爲創建全局的東西並注意使用它會更好,然後製作一個漂亮而蓬鬆的代碼,因爲垃圾回收器會使我們的遊戲變得更加美觀。
好了,所以使長話短說,請在這裏發表一些好的建議,所以我/我們能好,速度快,優化遊戲;)
在此先感謝: Zéiksz
看起來像一個很好的CW候選人:) – BlackBear
我建議使這個社區維基。 – Ben
我不買那使用堅實的OOP架構每次呼叫花費1-3 fps ... – Blindy