我将所有资源存储在一个类中并在游戏开始时加载它们,我正在尝试在单独的类中创建一个加载屏幕。
资产经理课程:
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() {
}
}
问题:
当我在控制台中运行它时,我获得进度百分比,但屏幕在加载时保持黑色(卡在Assets类中),然后闪烁到加载屏幕,并更改为MainMenuScreen
。
资产加载时如何停止黑屏?
答案 0 :(得分:1)
您遇到的问题是因为您正在直接加载所有资产,而这不是在不同的线程中完成的,并且在显示屏幕时运行。我建议使用manager.update(delta)
,这应该在你的游戏循环中调用并获得更新百分比。完整的来源对我来说有点难以解释,但我在以前的项目中做过类似的事情,这些来源可以在下面的GitHub上找到: