使用AssetManager在Java libgdx上出错

使用AssetManager在Java libgdx上出错,java,libgdx,assets,Java,Libgdx,Assets,因此,我开始尝试使用libgdx在java中进行一些游戏,并尝试使用AssetManager。但它总是出错。我将输入代码(我将尝试恢复代码)和输出。 游戏很好地通过了加载屏幕,但当它到达游戏屏幕时,它停止并给出了一个错误,我相信这是因为资产。 如果有人知道我为什么会犯这个错误 DesktopLauncher.java public class DesktopLauncher { public static void main (String[] arg) { LwjglA

因此,我开始尝试使用libgdx在java中进行一些游戏,并尝试使用AssetManager。但它总是出错。我将输入代码(我将尝试恢复代码)和输出。 游戏很好地通过了加载屏幕,但当它到达游戏屏幕时,它停止并给出了一个错误,我相信这是因为资产。 如果有人知道我为什么会犯这个错误

DesktopLauncher.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}
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);       
    }
}
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();     
    }

}
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();
   }


 }
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));
    }
}
public class AssetsManager {

    public AssetManager manager = new AssetManager();

    public String back  = "back.png";

    public void load(){

    manager.load(back, Texture.class);

    }
}

按me.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}
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);       
    }
}
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();     
    }

}
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();
   }


 }
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));
    }
}
public class AssetsManager {

    public AssetManager manager = new AssetManager();

    public String back  = "back.png";

    public void load(){

    manager.load(back, Texture.class);

    }
}

加载屏幕.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}
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);       
    }
}
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();     
    }

}
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();
   }


 }
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));
    }
}
public class AssetsManager {

    public AssetManager manager = new AssetManager();

    public String back  = "back.png";

    public void load(){

    manager.load(back, Texture.class);

    }
}

GameScreen.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}
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);       
    }
}
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();     
    }

}
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();
   }


 }
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));
    }
}
public class AssetsManager {

    public AssetManager manager = new AssetManager();

    public String back  = "back.png";

    public void load(){

    manager.load(back, Texture.class);

    }
}

Assets.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}
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);       
    }
}
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();     
    }

}
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();
   }


 }
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));
    }
}
public class AssetsManager {

    public AssetManager manager = new AssetManager();

    public String back  = "back.png";

    public void load(){

    manager.load(back, Texture.class);

    }
}

AssetManager.java

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new pressme(), config);
    }
}
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);       
    }
}
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();     
    }

}
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();
   }


 }
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));
    }
}
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$1.run(LwjglApplication.java:124)

编辑

谢谢你的提示

因此,在我将“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$1.run(LwjglApplication.java:124)
EDIT2

RC,Spylot,Tip,这是你说的

所以它解决了,我说

"assets.load" on "public void show()" 
这样,当屏幕加载时,他在开始时加载资产,我将其从屏幕上取下

"public void render(){" 
因为他总是加载资产,因为这是一个循环(我想是的),然后继续

"Assets.java public load(){" i put "assetsmanager.load();"
谢谢你的提示。然后在同一个地方我把

"assetsmanager.manager.finishLoading();"
因此,它在执行某项操作之前加载所有资产。谢谢你给我的小费


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

您应该知道,在加载资产时,在调用finishLoading之前,您无法使用这些资产。finishLoading阻止所有试图抓住资源的调用,直到它们在内存中完全加载

我强烈建议你读这本书


因此,简而言之,每次使用load()调用后,应该使用
manager.finishLoading()

完成它。问题最有可能是因为
Assets#back
为null(因为
Assets#load()
从未调用过),并且很难提取null,因此在“batch.begin()”之前添加“Assets.load”(我不知道这是否是放置它的正确位置),但给了我一个错误,我将编辑postYeah,因为它显然与AssetManager相同(未调用load),也许您应该花时间阅读文档和一些教程。我想问题在于路径名。在路径中添加文件夹名,如“data/back.png”@RC,我想当我调用“assets.load()”时,它也会调用“assetsmanager.load()”,因为在assets.load上有一个assetmanager.load()->
public void load(){assetsmanager=new assetsmanager();assetsmanager.load())
虽然这似乎是一个很好的答案,但您应该简短地描述问题所在以及完成加载的内容do@m.antkowicz我希望现在能令人满意。:)但如果我使用“finishLoading”,我认为加载屏幕不会工作,因为只有在加载所有资产后才会显示。加载屏幕的目的是在加载资产时显示,并显示process@DavidBorges事实上,在使用finishLoading之前,您无法访问正在加载的资产。您必须通过1)使用update()来解决这一问题;一旦它返回true,您将切换状态(但这可能会很快变亮)2)您创建一个独立于AssetManager的加载屏幕(也就是说,您在其他地方将其作为公共静态启动),并设置一个计时器,在几秒钟后,触发update()或切换状态。@LoadingScreen.java上的Spylot我正在使用此“**如果(assetsmanager.manager.update(){game.setScreen(newgamescreen(game));}**”,这不是你说的吗?