【发布时间】:2011-08-15 01:01:02
【问题描述】:
我正在制作我的第一个 Android 游戏,它将是一款使用 opengl es 的 3D 街机游戏。我已经研究了很长时间,主要是优化引擎以适应未来的灵活性。
无论如何,现在我已经完全完成了游戏功能和所有漂亮的东西,但它在不是我的调试手机的手机上落后了。该游戏具有相当高质量的移动游戏图形,因此预计会有一点滞后,但在 Nexus S 上运行游戏和在 MyTouch 4G 上运行游戏之间的性能差异是巨大的。该游戏甚至无法在 LG Optimus 之类的低端手机上玩(游戏可以运行,但它波涛汹涌,无法舒适地玩)。在我的 Nexus SI 上很少会出现断断续续的运动(我已经在游戏中实现了帧速率独立运动),但在 MyTouch 4G 上它更常见,虽然游戏仍然可以玩......但很烦人
我来自桌面游戏开发背景,之前我从未对优化感兴趣。你有什么建议可以帮助我加快游戏速度?
我已经尽可能多地尝试优化代码,性能得到了显着提升,但似乎有些事情我错过了或忽略了。这是一款拥有完整引擎和大量代码的大型游戏。
我已尝试跟踪所有分配并确保它们在运行时不会被释放或忘记,以便在您玩游戏时不会调用 GC。基本上我能想到的就这些了,我不知道还有什么可以让它滞后
我怀疑网格的多边形数量,因为即使它们是高质量的,我在游戏中添加了一个选项,让您可以从低、中和高中选择图形质量,就像在电脑游戏中一样,Low 和 High 之间的差异在 600-900 个顶点之间!我注意到的唯一改进是加载时间。也没有任何特殊的后处理效果、照明、着色器、实时 SSS 或任何这些。只是有纹理的脸:P
我所说的“滞后”也是随机冻结。我很确定它们是 GC,但它可能是别的东西,因为我认为我已经找到并控制了所有分配(有很多)。由于我的游戏是独立于帧率的,每当它解冻时,玩家和敌人以及一切都会“向前跳跃”以跟上,这使得本来就很困难的游戏变得更加困难!
我是分析和优化的新手。如何使用 android 调试工具(或其他第三方工具)更好地了解我的游戏在运行时的执行情况,以及何时/为何冻结,以便我可以修复它们。
另外,额外的问题:):有没有办法让我看到它在其他手机上的表现,而无需实际拥有手机或不认识拥有手机的人?比如,即使我没有 Droid X,我认识的人也不知道,它在 Droid X 上的运行速度有多快
【问题讨论】:
-
您是否在 Eclipse 的 DDMS 视图中跟踪了堆分配?每次有 GC 时它都会刷新,因此您可以确定冻结是否与 GC 调用相关。从那里您可以深入了解实际分配的内容并从那里开始。它最有可能是分配(
new任何东西),所以您自然会希望预先分配所有内容并尽可能多地利用对象池。
标签: android optimization garbage-collection profiling