我在LibGDX下遇到OpenGL ES上下文丢失的问题,所以我试图弄清楚如何解决问题。我的第一步是在扩展Screen的一个类中调用resume函数时实际重新初始化我的所有纹理。像这样:
@Override
public void resume() {
Tile.initTiles();
}
恢复功能重新创建我的所有瓷砖(包括它们的纹理),所以我认为这样可行。但是,根据文档: ApplicationListener Docs
永远不应在桌面上调用resume函数。现在,我的Android手机上从未调用简历,但在我的桌面上,我告诉程序在resume方法中将“true”打印到控制台,瞧,恢复功能实际上是在桌面上调用的。
我的主要问题是:
答案 0 :(得分:3)
我会快速解释一下我是如何做到这一点的,对我来说,它在桌面和Android上都没有问题。
首先,我使用AssetManager
表示我的所有资产,包括Texture
。我通常在通过加载屏幕进入实际游戏界面之前加载我的所有资产。但是,当您在Screen.show()
方法中加载它们时,它也应该有效。
每当我需要资产时,我检索它们的唯一方法是通过AssetManager.get(...)
。我的AssetManager
实际上是基础游戏类的public static
成员,因此可以从我的代码中的任何位置访问它,并且只有一个。
在Screen.resume()
方法中我添加了AssetManager.finishLoading()
,但我不确定这是否真的有必要。
游戏开始后,AssetManager
被实例化后,我调用静态方法Texture.setAssetManager(...)
。
这会关闭圈子。在Android上你的OGL上下文丢失,LibGDX实际上会为你恢复它。由于您为AssetManager
设置了Textures
,因此管理员可以在重新加载后找到纹理。 AssetManager.finishLoading()
将等到重新加载完成。在那之后,一切都应该像上下文丢失一样工作。
为什么Screen.resume()
没有被调用,我不能说。对我来说,这是在Android上调用的。也许你需要更新你的LibGDX版本。