2012-01-20 9 views
1

ゲームの黒い画面を起動すると、リソースがロードされているためにしばらく時間がかかります。 私は徹底的にチュートリアルを進め、進行中のバーを表示する方法を示しました。しかし、問題はプログレスバーが目に見えているときに他のものが停止しているときです。そして何も起こらない。黒い画面と進行状況バーが表示されます。なぜすべてのものが一時停止しているのか、loadresourcesとloadsceneのメソッドが機能していない理由を教えてもらえますか?解決策を提示してください。AndEngineのテクスチャをロード中のプログレスバー

答えて

0

リソースをワーカースレッドにロードする必要があります。これを行うのに便利なユーティリティはAsyncTaskです。ガイドトピックProcesses and Threadsには、なぜこのようなものが必要なのかについての説明と、ちょうど必要なものかもしれない簡単なAsyncTaskを実行する方法を示すサンプルコードがあります。

+1

実際にエンジン自体がリソースを読み込みます。私の質問は、ダイアログボックスやプログレスバーがあるときにエンジンが一時停止している理由です。手動で再開するにはどうすればいいですか? –

+0

@Jawad Amjadが私の答えを確認します。それが役に立てば幸い ;) – GuilhE

0
Engine.javaから

public void onDrawFrame(final GLState pGLState) throws InterruptedException { 
     final EngineLock engineLock = this.mEngineLock; 

     engineLock.lock(); 
     try { 
      engineLock.waitUntilCanDraw(); 

      this.mVertexBufferObjectManager.updateVertexBufferObjects(pGLState); 
      this.mTextureManager.updateTextures(pGLState); 
      this.mFontManager.updateFonts(pGLState); 

      this.onUpdateDrawHandlers(pGLState, this.mCamera); 
      this.onDrawScene(pGLState, this.mCamera); 

      engineLock.notifyCanUpdate(); 
     } finally { 
      engineLock.unlock(); 
     } 
    } 

そして、エンジンが停止し、UIが立ち往生理由です。フリーズすることなく、テクスチャがハードウェアにロードされている間に読み込み画面を表示することができます。具体的にはProgressBarとしましょう。それは簡単ではなく、多くのコードを必要としますが、それは可能であり、クレイジーなハッキングや、いくつかのロジックを必要としません。

あなたはリソースマネージャ(RM)と(AsyncTasksと)一緒に作業し、現在のシーンのためにテクスチャをロードするための責任があるシーンマネージャ(SM)を持っている必要があります。 BaseGameActivityがあるので、このActivityインスタンスを使用して、プログレスバーにフルスクリーンDialogを表示することができます。ロジックは次のとおりです。

  1. SMはシーンA
  2. SMがロードDialog
  3. SMが非同期のために各テクスチャのために(ハードウェアにすべてシーンAリソースをロードするRMに指示を示して表示するように頼まれますシーンA、texture.loadは)
  4. RM "onSceneTexturesLoadCompleteは、" すべてのテクスチャがロードされていることをSMに伝える

texture.loadはテクスチャが実際にロードされることを保証しないので、TimerTaskを拡張するTryToDismissDialogが必要です。随時このTryToDismissDialogシーンAテクスチャを照会し、それらが実際にロードされているかどうかをチェックします:

if (texturePack.getTexture().isLoadedToHardware()) { 
     texturesLoaded++; 
} 

すべてのテクスチャは、あなたはシーンの準備ができて表示されますDialogと出来上がりを解任ロードされている場合。
希望します。


ps:実際にはいくつかのコード行が含まれていますが、ここでは簡単なステップ/ガイド/擬似コードを投稿しました。私は最終的な解決策を投稿しません。なぜなら、それはかなり重く、 "プロジェクトに関連している"ためです。

関連する問題