我遇到了libGDX的问题,当我退出后按钮后恢复应用程序时,我只能看到一个白色屏幕。libGDX按下后退按钮后的Android白屏
实际的应用程序运行,接受触摸输入,并播放声音,但屏幕只是白色。
我已阅读,保持对纹理的静态引用可能会导致此问题,但我不这样做。
下面是我的资产代码如何工作的简化版本。
public class GdxGame extends Game {
private Assets assets;
@Override
public void onCreate() {
assets = new Asstes();
assets.startLoading();
/*
*Within SplashScreen, GdxGame.getAssets() is accessed, and
*manager.update() is called
*/
setScreen(new SplashScreen());
}
@Override
public void dispose() {
assets.dispose();
assets = null;
}
//Perhaps a problem??
public static Assets getAssets() {
return ((GdxGame) Gdx.app.getApplicationListener()).assets;
}
}
public class Assets implements Disposable{
private AssetManager manager;
public Assets() {
manager = new AssetManager();
}
public void startLoading() {
manager.load(....);
}
@Override
public void dispose() {
manager.dispose();
}
}
在后退按钮之后返回到该应用程序被按下时,AssetManager重新创建时,闪屏被重新打开(如白色),并且AssetManager更新,直到所有的资产被重新加载(约需2秒钟)。
所以当应用程序重新打开时,新的AssetManager正在加载所有必要的纹理,但由于某些原因,一切仍然是白色的。
它可能与我如何从我的UI和游戏类访问AssetManager有关吗?
//In GdxGame
public Assets getAssets() {
return ((GdxGame) Gdx.app.getApplicationListener()).assets;
}
这是我唯一能看到出错的地方,但即使如此,我也不明白这可能是什么问题。
任何帮助将不胜感激。
编辑:
这是SplashScreen类。这使问题更加混乱。在SplashScreen类中,我加载,绘制并处理徽标的新纹理。与AssetManager无关。在按下后退按钮后返回,这个新的纹理也不会出现。
public class SplashScreen extends Screen {
private Texture logo;
private Assets assets;
@Override
public void show() {
assets = GdxGame.getAssets();
logo = new Texture(Gdx.files.internal("data/logo.png"));
}
@Override
public void render(float delta) {
super.render(float delta);
if(assets.load()) {
//Switch screens
}
//getBatch() is the same form as getAssets() ((GdxGame) Gdx.app.getApplicationListener()).batch)
GdxGame.getBatch().draw(logo, 100, 100, 250, 250);
}
@Override
public void hide() {
super.hide();
logo.dispose();
}
}
如果你向我们展示splashscreen class,那会很好。你不使用暂停和恢复事件吗? –
@DenizYılmaz我会添加。我使用暂停和恢复事件,但不是任何与资产有关的事情。在这些事件中应该与资产有关吗?我将添加SplashScreen类。 – grimrader22
你正在讨论恢复应用程序,所以我很确定你必须使用简历事件。另外你提到你创建新的assetmanager,但是我没有在任何assetmanager教程中看到。 我想你可以使用 this.assets;而不是 ((GdxGame)Gdx.app.getApplicationListener())。assets; –