我用三个屏幕做了一个非常简单的游戏。游戏并不是真正的图形密集型。我想丢弃我的一次性物品,但如果我处理它们,这会导致游戏重启/重新访问屏幕时出现问题。我的对象是我的Assets类中的简单纹理和声音,所以我不知道我是否可以在这里加入池。
处理这些对象并在需要时检索它们的最佳方法是什么。
由于
答案 0 :(得分:1)
Libgdx提供AssetManager
,这允许您
初始化示例
AssetManager manager = new AssetManager();
manager.load("data/mytexture.png", Texture.class);
检索加载的资源
Texture tex = manager.get("data/mytexture.png", Texture.class);
处理资源
manager.unload("data/mytexture.png");
处置使用此AssetManager加载的所有资源
manager.clear();
有关AssetManager
的所有信息均可在github
答案 1 :(得分:1)
我不是关于内存管理主题的专家,但这些是我的发现。我还假设您正在使用LibGDX中的Screen
。
每当您离开屏幕时,无论是通过显示new Screen
还是Home
按钮,都会调用hide()并且垃圾收集器可能会处置资产。显然,当你自己处理它们时。
每当您显示正在调用的屏幕show()
时,您就可以再次加载资源。如果您确实拥有大量资产,建议您使用AssetManager
,但由于您声明不这样做,您可能只是在show()
方法中重新加载资产。
我猜你正在加载屏幕构造函数中的所有内容。您可能需要做的就是复制加载资产的代码并从那里设置表到show()
方法。构造函数只调用一次,因此每当android决定转储您的资产时,例如当您的应用程序当前未显示您的资产时,将不会重新加载。然而,show方法将被调用,你应该没有重新加载那里的一切。如果加载资产需要几毫秒,那么只需将它们加载到那里。否则,您可以使用资产管理器并在其上调用finishloading()
,这样您的资产仍然无法加载,并在需要时再次加载。
答案 2 :(得分:1)
听起来你懒得加载你的资产。确保在游戏或屏幕重新启动时始终加载新实例。或者在处理它们之后立即将引用设置为null。
如果您在没有创建新实例的情况下返回到屏幕,则需要在show()
方法中加载要处理的内容,因为不会再次调用构造函数。