gpt4 book ai didi

c# - XNA游戏性能

转载 作者:可可西里 更新时间:2023-11-01 07:45:15 26 4
gpt4 key购买 nike

我正在使用 C# 2010 和 XNA 4.0 编写游戏。我希望它是一款好游戏,而不是一些“只是另一个废话”,所以我的目标之一是良好的帧率。为此,我想请您提供一些建议,无论是与 XNA 相关还是与 C# 相关 - 我可以做些什么来加速我的代码并提高 FPS。

这是我发现的一些东西:

  • (c#) 使用 array代替 list<>如果您想访问大量数据(甚至很多:拥有 20000 个项目的数组几乎可以提供 20000 个列表的 180% FPS,将会大大提高性能。
  • (c#) 使用 for而不是 foreach将提高性能。在相同的 20000 个元素上,大约有 5-10% 的差异。
  • (xna 和 c#)调用方法会降低性能,所以当我将代码分散到调用其他方法等的方法中时,一切都非常酷且面向对象,每次调用的成本为 1-3 FPS。
  • (xna) update vs. draw: 当我把代码放到 update() 和 draw() 时,性能上没有区别,所以如果你不太在意,你不必把一些方法放在 update() 下而不是将所有内容放在 draw() 中以期获得更好的 FPS。
  • (xna) 不知道是我还是 4.0,但是当你加载一个包含大量纹理和非常复杂的网格的 .X 时,加载会花费很多时间。我不得不编写自己的 .X 加载器和网格/模型渲染器,因为 XNA 开始为每个三角形加载纹理,而不管前一个三角形是否具有相同的纹理。即使编写我自己的缓存纹理的内容加载器也不是解决方案,因为它仍然被使用了很多次。如果你做的东西又好又蓬松,我建议使用 drawuserprimitives而不是 Model类(class)。 (不知道是不是只有4.0,还是3.1也有这样的性能问题)
  • (xna 和c#)在绘图时尽量避免使用“new”。我在网上看到了一些代码,它们被复制/粘贴在一起并具有“basicEffect = new BasicEffect(graphicsDevice);”在 draw() 中如此丑陋,甚至更糟:在 draw() 内部的迭代中。这样会降低性能。而不是在“游戏”或静态类中有一个这样的类。这也适用于其他“临时对象”:丑陋但我认为最好创建一些全局的东西并注意使用它,然后制作一个漂亮而蓬松的代码,这将使我们的游戏成为垃圾收集器。

好吧,长话短说,请在这里发表一些好的建议,这样我/我们就可以做出好的、快速的和优化的游戏;)

提前致谢:蔡克斯

最佳答案

软件优化是一门手艺。最好的优化类型是基于收集的统计数据的证据。

除非遇到问题,否则不要优化。您不认为游戏的可玩性比这个或其他指标更重要吗?我的建议是先制作游戏,然后再考虑它在哪些方面表现不如您所愿。

然后发布一些具体问题,我相信你会在这里得到一些关于具体问题的帮助。

与此同时,我建议您从游戏开发书籍中获得更多信息,例如此处列出的那些:http://forums.create.msdn.com/forums/p/8642/45646.aspx

XNA Extereme 101 - 似乎是一个有趣的教程

关于c# - XNA游戏性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com