2016-09-09 9 views
0

私は間違っていることを確信していますし、私はかなりの間この時点で立ち往生しています。私は小さなゲームのための華麗なロード画面を作ろうとしているのです。 (私はまだ先に行くと、とにかく1を追加することを決定した練習だとして、それが必要ではなく、けれども。)libGDXに読み込み画面を表示することができない

ここでの質問に関連するコードです:それは

//Game states 
    private enum STATE 
    { 
     LOADING, START_MENU, PLAYING, PAUSE, GAME_OVER 
    } 
    private STATE state = STATE.LOADING; 

これらはgamestatesあるので、 LOADINGで始まるので、renderメソッドでLOADINGを実行できます。

public void show() 
    { 
//Setting up AssetManager 
     startMenuBackground = new Texture(Gdx.files.internal("startMenuBackground.png")); 
     startMenuBackgroundSplit = new TextureRegion(startMenuBackground).split(32, 32); 
     assetManager = new AssetManager(); 
     for(int appleImage = 0; appleImage < apple.length; appleImage++) 
     { 
      assetManager.load("bits/" + appleImage + ".png", Texture.class); 
     } 
     for(int bodyImage = 0; bodyImage < snakeBody.length; bodyImage++) 
     { 
      assetManager.load("body/" + bodyImage + ".png", Texture.class); 
     } 
     for(int backgroundImage = 0; backgroundImage < background.length; backgroundImage++) 
     { 
      assetManager.load("background/" + backgroundImage + ".png", Texture.class); 
     } 
     assetManager.load("KappaMan.png", Texture.class); 
     assetManager.load("playButton/0.png", Texture.class); 
     assetManager.load("playButton/1.png", Texture.class); 
     assetManager.load("title.png", Texture.class); 
     assetManager.load("AmenoSandstorm.mp3", Music.class); 
     assetManager.load("beMad.mp3", Music.class); 
     assetManager.load("collide.mp3", Music.class); 
     assetManager.finishLoading(); 

これは、ゲームのために私の資産のすべてを読み込むshowメソッドの開始です。

この部分は、ゲームの読み込みの進行状況を表示するため、この質問にとって特に重要です。 (動作していない部分である、私は黒い画面を取得します。)

case LOADING: 
      { 
       if(assetManager.update()) 
       { 
        state = STATE.START_MENU; 
       } 
       else 
       { 
        progress = assetManager.getProgress(); 
        tilesToLoad = 576 * progress; 
        tilesY = (int)tilesToLoad/32; 
        tilesX = (int)tilesToLoad % 32; 
       } 
       break; 
      } 

今私はそれがLOADINGを実行しながら、ゲームのためのすべての資産のロードを開始します。そうであれば、それはSTART_MENUに行き、そうでなければ進捗をチェックします。 tilesYはstartMenuBackgroundの読み込みが必要な行数、tilesXはstartMenuBackgroundSplitの進捗状況の一番下の行にロードする必要があるタイルの数です。

if(state == STATE.LOADING) 
     { 
      for(int tilesYLoad = 0; tilesYLoad < tilesY; tilesYLoad++) 
      { 
       if(tilesYLoad != tilesY - 1) 
       { 
        for(int tilesXLoad = 0; tilesXLoad < 32; tilesXLoad++) 
        { 
         batch.draw(startMenuBackgroundSplit[tilesXLoad][tilesYLoad], tilesXLoad * 32, tilesYLoad * 32); 
        } 
       } 
       else 
       { 
        for(int tilesXLoad = 0; tilesXLoad < tilesX; tilesXLoad++) 
        { 
         batch.draw(startMenuBackgroundSplit[tilesXLoad][tilesYLoad], tilesXLoad * 32, tilesYLoad * 32); 
        } 
       } 
      } 
     } 

最後に、renderメソッドの後にbatch.begin(); 私はすべての資産の読み込みの進行状況に応じて、関連するすべてのタイルを描画するこのコードを持っています。

if(state == STATE.LOADING) 
     { 
      layout.setText(loadingFont, LOADING_TEXT); 
      loadingFont.draw(batch, LOADING_TEXT, 0, layout.height); 
     } 

左下に書き込むこともあります。

進捗状況がコメントになったら、私はgamestateをSTART_MENUに変更しました。だから私は、ゲームがSTART_MENUに行く前に起動したときに、テキストを読み込むことを知っています。 "読み込んでいます..."しかし、バックグラウンドはまったく読み込まれませんか?それはただの黒です。

私は間違ったことを伝えることはできません。何か案は?

答えて

1

assetManager.finishLoading()は、すべてがロードされるまでブロックします。これは、すべてのアセットがロードされるまでshow()メソッドが終了しないことを意味します。

finishLoading()を呼び出す代わりに、renderメソッド内でassetManager.update()を呼び出す必要があります。これにより、アセットを読み込むことができますが、ブロックしないので、レンダリングメソッドは必要な処理を実行できます。

update()は、読み込むアセットがさらにある場合はfalseを返し、読み込みが完了するとtrueを返します。したがって、update()の呼び出しごとに結果を確認し、それに応じて処理を進める必要があります。

+0

ありがとうございました!これは、あなたが私がassignAssets()と呼ばれる新しいメソッドを作成しなければならないと言ったようにする前にも役立ちましたが、showメソッドではすべてのアセットをロードすることがわかりました!そして、assetManager.update()がtrueを返すとき、START_MENUに行く前に、すべてのアセットが割り当てられます。 :) –

関連する問題