libgdx:资产管理器块屏幕ui



我使用AssetManager加载游戏中的所有资产。我在显示加载进度方面有问题,或者相反,我试图在LoadingScreen渲染方法中使用此代码仅设置背景颜色。

    Gdx.gl.glClearColor(0.431f, 0.792f, 0.808f, 0xff / 255.0f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

Everiting加载很好,但在加载时,我得到了黑色屏幕,而不是glClearColor中的颜色设置。在实现加载条时也发生了同样的情况,比如这个例子

这里是Assests类的一部分

    public class Assets implements Disposable, AssetErrorListener {
        public static final Assets instance = new Assets();
      .
      .
        public void init (AssetManager assetManager) {
            this.assetManager = assetManager;
        // set asset manager error handler
        assetManager.setErrorListener(this);
        // load texture atlas
        assetManager.load(Constants.TEXTURE_ATLAS_OBJECTS, TextureAtlas.class);
     .
     .
        TextureAtlas atlas = assetManager.get(Constants.TEXTURE_ATLAS_OBJECTS);
     .

   }  
     .

}

这是我的LoadingScreen:的简单代码

    @Override
    public void show() {
        manager = new AssetManager();
        Assets.instance.init(manager);
   }
    public void render(float deltaTime) {
        Gdx.gl.glClearColor(0.431f, 0.792f, 0.808f, 0xff / 255.0f);//light blue
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        if (manager.update()) {
            ScreenTransition transition = ScreenTransitionFade.init(0.5f);
            game.setScreen(new HomeScreen(game), transition);
        }
}

在这里,我期望加载资产时显示浅蓝色的空屏幕,但我得到了黑屏。

我想有些代码阻塞了主线程,但我不知道如何修复它。

感谢的帮助

确保您知道何时调用Screen.show()Screen.render(float delta)

Screen.show():在调用Game.setScreen()时调用。

Screen.render(float delta):在Screen.show()结束后被连续调用。因此,在加载期间CCD_ 10尚未完成,并且显示默认背景(黑色)。

为了避免这种情况,单独的线程会很好。AssetManager以异步方式加载内容。现在我们只能正确使用它:

在呼叫Game.setScreen(<Loading Screen>)之前,先呼叫AssetManager.load(<your assets>)。然后直接调用LoadingScreen.render(float delta),您可以看到自己的背景。要检查加载是否完成,可以使用AssetManager.update(),如果完成则返回true,否则返回false。

最新更新