当涉及到优化时,我是一个相当大的新手。在我目前正在开发的这款游戏中,我已经设法优化了一个函数,并将其CPU负载削减了约0.5%,这是我一直以来的“牛逼”。
我的情况如下:我使用一个名为ExEn的XNA包装库在MonoTouch中开发了一个物理密集型游戏,尽管我可能会尝试,但我发现很难让游戏在iPhone4上达到可玩的帧率(此时甚至不想考虑iPhone3GS )。
性能下降几乎肯定是在物理计算中,如果我关闭物理,帧率会急剧上升,如果我禁用所有东西,渲染、输入、音频和只是让物理在物理密集型情况下性能徘徊在15fps左右。
我使用Instruments来分析性能,得到的结果是:http://i.imgur.com/FX25h.png耗尽性能最多的函数要么来自物理引擎(Farseer),要么来自它们调用的ExEn XNA包装器函数(特别是Vector2.Max,Vector2.Min)。
我研究了这些函数,我知道Farseer正在通过引用而不是通过值传递值到这些函数中,所以这就是我所能想到的唯一方法。这些函数本身非常简单,基本上相当于这样的操作
return new Vector2(Max(v1.x, v2.x), Max(v1.y, v2.y)) 基本上,我感觉自己被卡住了,在我有限的能力和对代码优化的理解中,我不确定我的选择是什么,或者我是否有任何选择(也许我应该卷曲成胎儿的姿势哭?)。在开启LLVM并内置发行版的情况下,我最多只能获得15fps。我确实设法通过降低物理精度将游戏速度提高到30fps,但这使得许多关卡根本无法玩,因为身体彼此相交并自我崩溃。
所以我的问题是,这是一个失败的原因,还是我可以做些什么来增强性能?
发布于 2011-07-06 23:01:00
首先,喜欢你在Windows Phone 7上的游戏吧!
其次,我在您的分析器输出中没有看到任何异常。我曾经对Farseer引擎进行过一次粗略的性能分析(在.net中运行),并得出了类似的结果。几乎看起来你的减速是成比例的,可能是由于单声道本身。
发布于 2011-07-06 23:26:10
我想你已经注意到http://farseerphysics.codeplex.com/documentation中的性能提示了:-)
如果可能,请尝试将主要角色或其他复杂对象替换为简单的立方体,并检查fps raises.
上的开销非常大
更新:
https://stackoverflow.com/questions/6597847
复制相似问题