Java 异步加载屏幕Libgdx

Java 异步加载屏幕Libgdx,java,android,libgdx,Java,Android,Libgdx,我将所有资产存储在一个类中,并在游戏开始时加载它们,我试图在一个单独的类中创建一个加载屏幕 资产管理类: public class Assets { public static AssetManager manager = new AssetManager(); public static void queueLoading() { (..) manager.load("sound/buttonpress.mp3", Sound.class)

我将所有资产存储在一个类中,并在游戏开始时加载它们,我试图在一个单独的类中创建一个加载屏幕

资产管理类:

public class Assets {


    public static AssetManager manager = new AssetManager();

    public static void queueLoading() {
        (..)
        manager.load("sound/buttonpress.mp3", Sound.class);
        (..)
        while(!manager.update())
        {
            System.out.println("Loaded: " + manager.getProgress() *100 + "%");
        }

    }
    public static boolean update() {
        return manager.update();
    }
}
加载屏幕类别:

public class LoadingScreen implements Screen{
    final Game1 game;
    Sprite LdScreen;
    OrthographicCamera camera;
    public LoadingScreen(Game1 gam){
        game=gam;
        camera = new OrthographicCamera();
        camera.setToOrtho(false, 1920, 1080);

    }

    public void show() {
        Texture LdscreenTexture = new Texture(Gdx.files.internal("data/Background.png"));
        LdScreen =  new Sprite (LdscreenTexture);
        Assets.queueLoading();
        }

    @Override
    public void render(float delta) {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        camera.update();
        game.batch.setProjectionMatrix(camera.combined);
        game.batch.begin();
        game.batch.draw(LdScreen, 0,0);
        game.batch.end();
//      Assets.queueLoading();
        if(Assets.update()){
            game.setScreen(new MainMenuScreen(game));
            System.out.print("hllasgsgsag");
        }
    Assets.update();
    }
    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void hide() {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void dispose() {

    }
}
问题:

当我在控制台中运行它时,我会得到进度百分比,但在加载时屏幕保持黑色(卡在资产类别),然后它会闪烁到加载屏幕,并更改为
MainMenuScreen

如何在加载资产时停止黑屏?

您遇到的问题是,您正在直接加载所有资产,而这不是在不同的线程中完成的,而是在显示屏幕时运行的。我建议使用
manager.update(delta)
,它应该在游戏循环期间调用并获取更新百分比。完整的源代码对我来说有点难以解释,但我在以前的项目中也做过类似的工作,源代码可在GitHub上获得,如下所示:

资产类别:

加载屏幕:

posible duplicate@angelangle该答案并没有解决这个稍有不同的问题,而且我已经详细说明了这个问题