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该答案并没有解决这个稍有不同的问题,而且我已经详细说明了这个问题