2016-07-18 8 views
1

libgdxを使用してJavaでゲームをやり始めましたが、私はAssetsManagerを使用しようとしています。それはエラーを与え続けます。私はコード(私はコードを再開しようとする)と出力を入れます。 ゲームは読み込み画面をうまく通り抜けますが、ゲーム画面に到達すると停止してエラーが表示されますので、それは資産だと思います。 なぜこのエラーが発生したのか誰かが知っている場合。AssetsManagerを使用したJava libgdxのエラー

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

EDIT

RCは、私はいくつかのエラーでまだ "()assets.load" を置くので、後は先端

いただきありがとうございます。私は "の資産がわからない。負荷()「それはRC、ヒントについてSpylotのTYが、それはあなたが

言ったように、そのiが

をputing、解決した適切な場所に

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

です

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

このように画面が読み込まれると、開始時にassestが読み込まれ、私はそれを

"public void render(){" 

、彼は常にヒントについて

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

おかげRcは上、その後、(私はそう思う)そのループためassestsをロードしたため。それで同じ場所で、私は何かをする前にすべての資産を読み込むように、

を入れます。先端にありがとうございます。

ご協力いただき、ありがとうございました。ありがとうございました。

+0

を使用して、それを終える必要がある問題が最も可能性が高いです(')(資産#負荷 'ので、呼び出されることはありません)、ヌルは –

+0

を描画するのが難しいので、 "assets.load"を "batch.begin();"の前に追加してください。 (私はそれを置くために適切な場所を知っていませんが)私には投稿を編集するエラーを与えます –

+0

ああ、明らかにAssetManager(ロードされていない)と同じであるので、おそらくあなたは、いくつかのチュートリアル。 –

答えて

2

アセットを読み込むときは、finishLoadingを呼び出すまで使用できません。 finishLoadingは、メモリに完全にロードされるまで、アセットを取得しようとするすべての呼び出しをブロックします。

私はあなたにはAssetManager APIを読むことを強くお勧めします。 `資産#1 back`がnullであるため、

だから要するに、あなたは負荷()の呼び出しを使用するたびの後、あなたはmanager.finishLoading()

+0

それはすぐに何が問題であり、 finishLoading' do –

+0

@ m.antkowiczこれで満足です。 :) – Spacemudd

+0

私は "finishLoading"を使用する場合、私はすべてのアセットがロードされた後に表示されるので、LoadingScreenは動作しないと思う。資産がロードされているときに表示され、プロセスを表示する目的のloadingscreenです。 –

関連する問題