gpt4 book ai didi

java - LibGDX setScreen() 多次执行时会导致游戏崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:20 25 4
gpt4 key购买 nike

我有一个 GameScreen ,在关卡结束后,我将屏幕设置回 GameScreen 作为当用户点击重新启动按钮时重新启动。我执行此操作 this.setScreen(new GameScreen(game)); 在执行该行代码之前,我会处理屏幕本身、屏幕中使用的所有纹理、字体文件等,除了 box2D 之外的所有内容(世界,因为处理它会给我带来 native 错误并使游戏崩溃)。但即使我在设置屏幕之前处理了 Assets ,游戏在重新启动 15-20 次后仍然崩溃。

我通过打印JavaHeap来分析内存使用情况,发现每次重新启动时内存使用情况都会增加,直到某个点,然后又回到低点,如下所示:

- Restart1: 10MB
- Restart2: 13MB
- Restart3: 15MB
- Restart4: 10MB
- Restart5: 11MB
- Restart6: 14MB
- Restart7: 9MB

我已经阅读了有关内存使用情况的信息,发现这种行为是正常的。但我的游戏在几次重新启动后仍然崩溃,甚至没有给出错误消息。

这可能是什么原因造成的?

编辑:我在 ZTE Blade 上测试了游戏,发现每次重置游戏都会变慢,但在大约 15-20 次重置后仍然会崩溃。

最佳答案

内存上下模式是垃圾收集的标准,您只需担心垃圾收集后是否开始无法达到之前的低点,因为这表明内存泄漏。听起来好像可能有一些东西你没有处理掉,但是如果你只是要重新加载所有相同的 Assets ,为什么要处理掉任何东西呢?

切换到使用AssetManager。如果您在 Screen 构造函数中调用 AssetManager.load、在 Screen.show 方法中调用 AssetManager.finishLoading 以及在 Screen.hide 方法中调用 AssetManager.unload,则永远不应该卸载任何 GameScreen 资源,因为 AssetManager 执行引用计数的方式,并且只有在导航至不同的屏幕。不要忘记在 render 方法中调用 `AssetManager.update

关于java - LibGDX setScreen() 多次执行时会导致游戏崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22333817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com