1

我正在测试我的游戏,但遇到了问题。当用户死亡时,我的主要游戏类正在重新启动(而不是整个应用程序),但是每当它重新启动时,它的运行速度就会越来越慢。我正在考虑可能的内存泄漏。

我正在使用 setScreen(Screen sc) 方法从一个屏幕切换到另一个屏幕。我也在清理 dispose() 方法,找不到原因。

所以我问你也许指向我任何方向可能导致我的应用程序在重新启动时变慢?

它可能是 ShapeRenderer,因为我在循环中渲染了大量的形状——也许这就是问题所在?但该应用程序运行完美,直到我调用主游戏类的新实例。

代码太多,无法发布,所以对于大量的文字,我很抱歉。我真的希望你能以某种方式指出我可能出了什么问题!

4

3 回答 3

4

可能对你有帮助的东西。使用 jmap ( http://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html )。jmap 显示 jvm 当前持有的对象实例。只需为您的游戏制作一个可运行的 jar,启动游戏,检查 jmap,死一点,然后再次检查 jmap。也许您会看到 Texture-Objects 的增加,因此您可能没有清理其中的一些(如果您使用 AssetManager,很容易忘记一些)。

于 2013-08-28T11:20:32.910 回答
4

如果您查看ScoreScreen,您会发现您没有处理加载的纹理。

我强烈建议您查看用于 libgdx 的Asset Manager教程和指南,以避免将来出现这种情况。

编辑:

旁注,您的代码一点也不差,所以不要为此感到羞耻。事实上,我会说它比平均水平要好:)。

于 2013-08-28T15:23:27.500 回答
1

使用跟踪内存分配的工具将比代码审查有用得多。

使用 Eclipse DDMS 内存跟踪器:http: //developer.android.com/tools/debugging/ddms.html#alloc

于 2013-08-28T15:06:01.090 回答