AssetsManager 在 Java libgdx 上出错

Error on Java libgdx with AssetsManager

所以我开始尝试在 java 和 libgdx 中做一些游戏,我正在尝试使用 AssetsManager。但它一直报错。我会把代码(我会尝试恢复代码)和输出。 游戏通过加载屏幕正常,但当它到达游戏屏幕时停止并给出错误,我相信这是因为资产。 如果有人知道我为什么会收到此错误。

DesktopLauncher.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}

pressme.java

public class pressme extends Game {

    LoadingScreen loadingscreen;
    AssetsManager assetsmanager;
    Assets assets;


    @Override
    public void create() {
        assets = new Assets();
        assetsmanager = new AssetsManager();
        assetsmanager.load();
        assets.other();
        loadingscreen = new LoadingScreen(this);
        setScreen(loadingscreen);       
    }
}

LoadingScreen.java

public class LoadingScreen implements Screen {

    Assets assets;
    AssetsManager assetsmanager;
    private final pressme game;
    public GameScreen game_screen;

    public LoadingScreen(final pressme game){

        assets = new Assets();
        assetsmanager = new AssetsManager();
        this.game = game;

    }
    @Override
    public void show() {
        assetsmanager.load();

    }

    private void update(float delta){

        System.out.println(progress);
        if(assetsmanager.manager.update()) {
            game.setScreen(new GameScreen(game));
          }
        progress = assetsmanager.manager.getProgress();     
    }

}

GameScreen.java

public class GameScreen implements Screen {
    pressme game;
    Assets assets;
    AssetsManager assetsmanager;

    public GameScreen(pressme game){
        this.game = game;
        assets = new Assets();
        assetsmanager = new AssetsManager();
    }
    @Override
    public void render(float delta) { 

    Gdx.gl.glClearColor( 0.5F, 0.5F, 0.5F, 0.5F);
        Gdx.gl.glClear( GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );


        camera.update();
        generalUpdate(touch, camera);

        batch.setProjectionMatrix(camera.combined);
        assets.load();
        batch.begin();
        batch.draw(assets.back, 0, 0);
        batch.end();
   }


 }

Assets.java

public class Assets {

    AssetsManager assetsmanager;

    public Sprite back;

    public void load(){
        assetsmanager = new AssetsManager();
        assetsmanager.load();
        back = new Sprite(assetsmanager.manager.get(assetsmanager.back, Texture.class));
    }
}

AssetsManager.java

public class AssetsManager {

    public AssetManager manager = new AssetManager();

    public String back  = "back.png";

    public void load(){

    manager.load(back, Texture.class);

    }
}

输出

LOADINGGG
0.0 

0.0 

0.015151516 

0.015151516 

0.030303031 

    .
    .
    .
0.969697 

0.9848485 

0.9848485 

Exception in thread "LWJGL Application" java.lang.NullPointerException

     at com.badlogic.gdx.graphics.g2d.SpriteBatch.draw(SpriteBatch.java:586)

     at com.david.pressme.GameScreen.render(GameScreen.java:244)

     at com.badlogic.gdx.Game.render(Game.java:46)

     at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223)

     at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:124)

编辑

RC Thank you for the tip

所以在我输入“assets.load()”之后仍然有一些错误。我不知道“assets.load()”是否在正确的位置

LOADINGGG
0.0
0.0
0.015151516
0.015151516
0.030303031
.
.
.
0.969697
0.969697
0.9848485
0.9848485
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Asset not loaded: back.png
    at com.badlogic.gdx.assets.AssetManager.get(AssetManager.java:144)
    at com.david.pressme.Assets.load(Assets.java:254)
    at com.david.pressme.GameScreen.render(GameScreen.java:172)
    at com.badlogic.gdx.Game.render(Game.java:46)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:124)

EDIT2

RC,Spylot ty 的提示,这就是你所说的

所以它解决了,我把

"assets.load" on "public void show()" 

这样,当屏幕加载时,他会在开始时加载资产,然后我将其从

"public void render(){" 

因为他总是加载资产因为它是一个循环(我认为是这样),然后在

"Assets.java public load(){" i put "assetsmanager.load();"

感谢 Rc 的提示。然后在同一个地方我把

"assetsmanager.manager.finishLoading();"

所以它在做某事之前加载所有资产。谢谢间谍的提示。

感谢所有帮助或试图提供帮助的人。非常感谢。

您应该知道,当您加载资产时,您必须调用 finishLoading 才能使用它们。 finishLoading 阻止所有试图获取资产的调用,直到它们完全加载到内存中。

强烈建议您阅读 AssetManager API

所以简而言之,每次使用 load() 调用后,您应该使用 manager.finishLoading()

结束它