LibGDX恢复功能

时间:2014-02-21 23:08:41

标签: opengl-es libgdx openglcontext

我在LibGDX下遇到OpenGL ES上下文丢失的问题,所以我试图弄清楚如何解决问题。我的第一步是在扩展Screen的一个类中调用resume函数时实际重新初始化我的所有纹理。像这样:

@Override
public void resume() {
    Tile.initTiles();
}

恢复功能重新创建我的所有瓷砖(包括它们的纹理),所以我认为这样可行。但是,根据文档: ApplicationListener Docs

永远不应在桌面上调用resume函数。现在,我的Android手机上从未调用简历,但在我的桌面上,我告诉程序在resume方法中将“true”打印到控制台,瞧,恢复功能实际上是在桌面上调用的。

我的主要问题是:

  • 为什么恢复功能会在我的桌面上调用,而不是在我的Android手机上调用?
  • 如何在Android手机的简历上重新加载纹理?目前我的纹理在击中后退键后恢复游戏时是白色的。有趣的是,当通过主页按钮退出时,纹理会重新加载。

1 个答案:

答案 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版本。