2013-08-28 46 views
1

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

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

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

它可能是ShapeRenderer,因为我在循环中渲染大量的形状 - 也许这就是问题所在?但是这款应用完美无缺,我称之为主游戏类的新实例。

有太多的代码发布它,所以我很抱歉大量的文字。我真的希望你能以某种方式指出我的错误!

+0

发布与玩家在某处死去或将整个事情上传到github时发生的事情相关的代码。两种可能性,无论是你引入了memoryleak还是libgdx,我们都无法知道没有代码。 – arynaq

+0

其中一个原因可以是静态变量。因为班级仍然在内存中加载时,你关闭应用程序,但还没有杀死它 –

+0

你在游戏中使用方块2d –

回答

4

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

+0

我试过eclipse中的内存分析器,但是我的内存消耗显然不是很高,几乎不到10-20mb。这真的很奇怪,因为游戏的速度非常随机。即使有时候在玩完之后(当我可以期待缓慢的表现时),它突然开始工作得非常顺利。如果我告诉你我注意到FPS随机变化,它会有所帮助吗? – user2685747

+0

我只是看着你的代码,虽然你的Kurve类代码似乎正确地处理了所有的资源,但你的ScoreScreen类并没有处理它的纹理或spritebatch。我运行了程序(添加了一些随机纹理后)),并使用fps-logger显示fps,它运行在60帧左右,屏幕变化时几乎没有下降。 – Nozdrum

4

如果你看看ScoreScreen你会看到,你是不是配置的纹理加载的。

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

编辑:

侧面说明,你的代码是不是坏的,所以不要被它感到羞耻。事实上,我会说它比平均水平好:)。

+0

我学习数学,我为这一个而感到羞愧,对于你所有的时间感到抱歉,我几乎搞砸了一个非常基本的代数公式,它似乎,但从来没有想过我可能是错的。我真的很抱歉,但感谢我今天被迫了解遇到内存泄漏!欢呼 – user2685747

+0

+1以供AssetManager使用 –