0

我正在开发一款适用于 Android 的大炮游戏,它需要程序生成关卡。当玩家在空中飞行时,新的部分会被添加到关卡的末尾,以使其无限期地进行下去。随着这些部分的添加,玩家已经通过的部分被删除。问题是创建一个部分通常会导致 GC_FOR_ALLOC,它会暂停游戏大约 30 毫秒并导致明显的延迟。

可用内存保持相当一致,因为对象被删除而其他对象被添加,因此似乎没有内存泄漏。我使用的引擎是来自 iOS 的 cocos2D-android-1 端口。

我看到了许多类似“在游戏运行时不要初始化事物”的解决方案,但关卡生成的本质要求这样做,因为无法在游戏开始时就创建无限长度的关卡。

谢谢你的帮助!

4

1 回答 1

3

你不是很具体。如果滞后太大,你必须设法减少它。

一种方法可能是更频繁地收集 - 导致更短但更频繁发生的暂停。

例如,您可能会创建较小的或仅部分的部分,然后尝试推动垃圾收集器运行。你会用System.gc()这个。但请注意,System.gc()不能保证会导致它实际开始运行。

一个更好的解决方案是重用对象。在关卡启动之前创建的对象。这样,即使是无穷无尽的关卡也不会导致任何垃圾收集,因为没有垃圾积累。但请确保不要创建任何非池化对象!

于 2012-10-06T21:44:17.623 回答