我在写一款使用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