我正在制作我的第一款Android游戏,它将成为一款使用opengl es的3D街机游戏。我已经做了很长时间的工作,主要是优化发动机,以便将来具有灵活性。
无论如何,现在我完全已经完成了游戏功能和所有漂亮的东西,但它落后于不是我的调试手机的手机。该游戏拥有相当高质量的手机游戏图形,所以预计会有一点点落后,但是在Nexus S上运行游戏和在MyTouch 4G上运行游戏之间的性能差异是巨大的。这款游戏甚至不能在像LG Optimus这样的低端手机上播放(游戏运行,但它太过波涛汹涌,不能轻松玩)。在我的Nexus SI上,很少会发生波涛汹涌的动作(我在游戏中实现了帧率独立的移动)但是在MyTouch 4G上它更常见,虽然游戏仍然可以播放....但是很讨厌
我来自桌面游戏开发背景,优化从未成为我以前感兴趣的主题。你能推荐什么来帮助我加快游戏速度?
我尽可能地尝试优化代码,并且性能得到了显着改善,但似乎有一些我错过或忽略的事情。它是一款带有完整引擎和大量代码的巨大游戏。
我已经尝试跟踪所有分配并确保它们在运行时没有被释放或忘记,以便在您播放时不会调用GC。多数民众赞成基本上我只能想到做什么,我不知道还有什么可以使它成为lagg
我怀疑它的网格聚合数,因为即使它们质量很高,我在游戏中添加了一个选项,让你可以选择低,中,高的图形质量,就像电脑游戏一样,低和高之间的差异在600-900个顶点之间!我注意到的唯一改进是加载时间。此外,没有任何特殊的后处理效果,灯光,着色器,实时SSS或其中任何一种。只是纹理面孔:P
我正在做的“lagg”随机冻结。我很确定他们是GC,但它可能是别的,因为我想我找到并控制了所有的分配(有很多)。由于我的游戏是独立于帧速率的,每当它解冻时,玩家和敌人以及所有东西都“向前跳”以跟上,这使得已经很难的游戏变得更加困难!
我是分析和优化的新手。我如何使用android调试工具(或其他第三方工具)来更好地了解我的游戏在运行时的表现,以及何时/为什么它会冻结以便我可以修复它们。
另外,奖金问题:):有没有办法让我看到它如何在没有手机或知道拥有它们的人的情况下在其他手机上执行?就像,虽然我没有Droid X,也没有我知道的任何人,它在Droid X上的速度有多快
答案 0 :(得分:6)
您是否尝试使用traceview分析代码? 插入
Debug.startMethodTracing("myfile");
在onCreate中,然后
Debug.stopMethodTracing();
您希望它完成文件的写入。要查看结果,请将设备插入计算机并运行:
/path/to/android-sdk/platform-tools/adb pull /sdcard/myfile.trace
/path/to/android-sdk/tools/traceview ./myfile.trace
这将显示哪些课程花费更多时间。您可以优化较慢的类,和/或将其移动到后台线程。
你提到它在某些手机中工作正常,也许那些是24MB / app限制而不是16mb / app限制的新手机?您可以尝试Eclipse中的Memory Analyzer来检查内存泄漏或不必要的大对象。要安装,请转到帮助 - >安装软件,然后使用
http://download.eclipse.org/mat/1.1/update-site/
然后,当您在DDMS视图中进行调试时,选择Dump HPROF File(带有红色箭头的绿色玻璃),它应该打开内存分析器。
修改
现在似乎需要转换Android-hprof文件,如here所述。
答案 1 :(得分:0)
这基本上是我能想到的全部 这样做。我不知道还能做什么 让它滞后。
很多人这样做,通过尝试思考事物来优化。这将带你走一段路,但只是部分方式,特别是如果软件很大的话。
实际上,代码中需要花费时间expose themselves来快照发现的东西。 你不需要考虑它们。 你只需让程序显示它们。 Here's an example.
答案 2 :(得分:0)
首先仔细看看logcat在说什么。也许你会找到不必要的滞后行为的答案。其次,如果你想检查方法执行的频率和时间,只需使用DDMS。不知道你正在使用什么样的环境,但Eclipse中有一个Perspective,它有一个名为“Start method profiling”的选项。只需点击它,而不是等几秒钟然后取消它。过了一会儿,你会收到压倒性的报道。 设备问题,让我引用:“如果你想知道你的应用在给定设备上的表现,你需要在该设备上进行测试。”来自[1]
[1] http://developer.android.com/guide/practices/design/performance.html