分析和优化android游戏

分析和优化android游戏,android,optimization,garbage-collection,profiling,Android,Optimization,Garbage Collection,Profiling,我正在制作我的第一个Android游戏,这将是一个使用opengl es的3D街机游戏。我在这方面已经做了很长时间了,主要是优化引擎以获得未来的灵活性 不管怎样,现在我已经完全完成了游戏功能和所有漂亮的东西,但它在不是我的调试手机的手机上落后了。这款游戏有相当高质量的手机游戏图形,因此预计会有一点滞后,但在Nexus S上运行游戏和在MyTouch 4G上运行游戏的性能差异是巨大的。这款游戏甚至不能在LG Optimus这样的低端手机上玩(游戏可以运行,但太颠簸了,玩起来不舒服)。在我的Nexu

我正在制作我的第一个Android游戏,这将是一个使用opengl es的3D街机游戏。我在这方面已经做了很长时间了,主要是优化引擎以获得未来的灵活性

不管怎样,现在我已经完全完成了游戏功能和所有漂亮的东西,但它在不是我的调试手机的手机上落后了。这款游戏有相当高质量的手机游戏图形,因此预计会有一点滞后,但在Nexus S上运行游戏和在MyTouch 4G上运行游戏的性能差异是巨大的。这款游戏甚至不能在LG Optimus这样的低端手机上玩(游戏可以运行,但太颠簸了,玩起来不舒服)。在我的Nexus S上,我很少有不规则的移动(我在游戏中实现了与帧速率无关的移动),但在MyTouch 4G上,这种情况要常见得多,尽管游戏仍然可以玩……但很烦人

我来自桌面游戏开发的背景,优化从来都不是我感兴趣的话题。你能推荐什么来帮助我加快游戏速度

我已经尽可能多地优化代码,性能也有了显著的提高,但似乎有些东西我忽略了或忽略了。这是一个巨大的游戏,有一个完整的引擎和大量的代码

我已尝试跟踪所有分配,并确保它们在运行时不会被释放或忘记,以便在播放时不会调用GC。这基本上就是我能想到的,我不知道还有什么能让它落后

我怀疑它是网格的多边形数,因为即使它们是高质量的,我在游戏中添加了一个选项,可以让你从低、中、高中选择图形质量,就像在电脑游戏中一样,低和高之间的差异在600-900个顶点之间!我注意到的唯一改进是加载时间。此外,也没有任何特殊的后处理效果、照明、着色器、实时SSS或任何这些。只是有纹理的脸:P

另外,我提到的“lagg”是随机冻结。我很确定它们是GC,但也可能是其他东西,因为我认为我已经找到并控制了所有分配(有很多)。因为我的游戏是独立于帧速率的,每当它解冻时,玩家和敌人以及所有东西都会“向前跳”以跟上,这使得一个已经很难玩的游戏变得更加困难

我不熟悉分析和优化。我如何使用android调试工具(或其他第三方工具)更好地了解我的游戏在运行时的表现,以及何时/为什么会冻结,以便修复它们

另外,还有一个额外的问题:):有没有一种方法可以让我在没有手机的情况下或者不知道手机用户的情况下,看看它在其他手机上的表现如何?比如,即使我没有Droid X,我也不认识任何人,它在Droid X上的速度会有多快

这就是我能想到的 做。我不知道还能做什么 让它滞后

很多人都是这样做的,那就是通过尝试思考来优化。这会让你半途而废,但只是半途而废,特别是如果软件很大的话

实际上,代码中需要时间才能通过快照发现的内容。 你不需要去想他们。 您只需让程序显示它们。
您是否尝试过使用traceview分析代码? 插入

那么在onCreate中

Debug.stopMethodTracing();
在您希望它完成文件写入的位置。要查看结果,请将设备插入计算机并运行:

/path/to/android-sdk/platform-tools/adb pull /sdcard/myfile.trace
/path/to/android-sdk/tools/traceview ./myfile.trace
这将显示哪些课程需要更多的时间。您可以优化较慢的类,和/或将其移动到后台线程

您提到它在某些手机上运行良好,也许这些是24mb/应用程序限制而不是16mb/应用程序限制的较新手机?您可以在Eclipse中尝试,以检查内存泄漏或不必要的大型对象。要安装,请转到帮助->安装软件,然后使用

http://download.eclipse.org/mat/1.1/update-site/
然后,在DDMS视图中调试时,选择Dump HPROF File(带红色箭头的绿色玻璃),它将打开内存分析器

编辑-


看起来您现在需要转换Android hprof文件,如前所述。

首先仔细看看logcat在说什么。也许你会找到不必要的滞后开始的答案。其次,如果您想检查方法执行的频率和时间,只需使用DDMS即可。不知道您使用的是哪种环境,但Eclipse中有一个透视图,它有一个名为“启动方法评测”的选项。只需单击它,然后等待几秒钟,然后松开它。过一会儿你会得到一份压倒性的报告。 关于设备问题,让我举个例子:“如果你想知道你的应用程序在给定设备上的性能,你需要在该设备上进行测试。”


[1]

您是否在Eclipse的DDMS视图中跟踪了堆分配?它将在每次有GC时刷新,因此您可以确定冻结是否与GC调用相关。从那里你可以深入了解实际分配的是什么,并从那里开始。这很可能是分配(
new
Anything),因此您自然希望预先分配所有内容,并尽可能多地利用对象池。另请参阅:只需注意调试跟踪,就需要WRITE\u EXTERNAL\u存储权限。
http://download.eclipse.org/mat/1.1/update-site/