2011-04-28 60 views
3

我正在制作我的第一款Android游戏,它将使用opengl es进行3D街机游戏。我一直在研究它很长一段时间,主要是为未来的灵活性优化引擎。反正现在我完全用游戏功能和所有漂亮的东西来完成,但它滞后于手机,而不是我的调试手机。该游戏对于手机游戏具有相当高质量的图形,因此预计会出现一些小问题,但在Nexus S上运行游戏并在MyTouch 4G上运行游戏的性能差异非常大。这款游戏甚至在LG Optimus等低端手机上都无法播放(游戏运行,但是它太过震荡,无法播放)。在我的Nexus SI上很少会有波动(我已经在游戏中实现了帧率独立运动),但在MyTouch 4G上它更常见,虽然游戏仍然可以播放....但是很烦人分析和优化游戏android

我来自桌面游戏开发背景,优化从来没有受到我的兴趣。你能推荐什么来帮助我加快游戏速度?

我试过尽可能地优化代码,并且性能有了显着的提高,但似乎有些事情我已经遗漏或忽略了。它是一个巨大的游戏,具有完整的引擎和大量的代码。

我试着追踪所有分配,并确保它们在运行时不会被释放或遗忘,以便GC在您播放时不会被调用。这基本上是我所能想到的,我不知道还有什么可以让它延缓,因为即使它们质量很高,我在游戏中添加了一个选项,让您可以像在电脑游戏中一样选择低,中和高的图形质量,低位和高位之间的差异在600-900个顶点之间!我注意到的唯一改进就是加载时间。也没有任何特殊的后期处理效果,照明,着色器,实时SSS或任何其他。只是纹理的面孔:P

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

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

此外,奖金问题:)有没有办法让我看看它会如何在其他手机上执行而没有真正拥有手机或知道拥有手机的人?就像,如何快速将它走在Droid X的,即使我没有Droid X的,也没有人知道

+0

你有没有跟踪在DDMS视图堆分配在Eclipse?每次有GC时它都会刷新,因此您可以确定冻结是否与GC调用相关。从那里你可以挖掘实际分配的内容并从那里出发。这是最有可能的分配('new' Anything),所以很自然地,你需要预先分配所有的东西并尽可能地利用对象池。 – LeffelMania 2011-04-28 20:43:14

+0

另请参阅:http://stackoverflow.com/questions/5626947/optimize-android-application-before-release – bigstones 2011-04-28 22:06:40

回答

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 /应用程序限制而不是16mb /应用程序限制?您可以在Eclipse中尝试Memory Analyzer,以检查内存泄漏或不必要的大对象。要安装,进入帮助 - >安装软件,并使用

http://download.eclipse.org/mat/1.1/update-site/ 

然后,当你在DDMS视图调试,选择转储HPROF文件(绿色玻璃与红色箭头),应该打开记忆分析仪。

编辑 -

看来你需要将Android的HPROF文件现在转换,如所描述here

+0

只需注意Debug跟踪,就需要WRITE_EXTERNAL_STORAGE权限。 – Peanut 2014-03-07 21:27:16

0

这基本上是所有我能想到的 做。我不知道 还有什么可以让它滞后。

很多人这样做,这是通过尝试去思考的事情来优化。这会带你分开,但只有部分方式,特别是如果软件很大。

其实,代码中的东西需要时间expose themselves到快照发现。 你不需要考虑它们。 你只是让程序显示它们。 Here's an example.

0

首先仔细看看logcat的说法。也许你会找到不必要的滞后begviour的答案。其次,如果你想检查方法执行的频率和时间,只需使用DDMS。不知道你使用的是什么类型的环境,但Eclipse中有一个Perspective,它有一个名为“Start method profiling”的选项。只需点击它,然后等待几秒钟并取消点击。过了一会儿,你会得到压倒性的报告。 有关设备问题,请让我引用:“如果您想知道您的应用在给定设备上的表现如何,则需要在该设备上进行测试。”从[1]

[1] http://developer.android.com/guide/practices/design/performance.html