ゲームの黒い画面を起動すると、リソースがロードされているためにしばらく時間がかかります。 私は徹底的にチュートリアルを進め、進行中のバーを表示する方法を示しました。しかし、問題はプログレスバーが目に見えているときに他のものが停止しているときです。そして何も起こらない。黒い画面と進行状況バーが表示されます。なぜすべてのものが一時停止しているのか、loadresourcesとloadsceneのメソッドが機能していない理由を教えてもらえますか?解決策を提示してください。AndEngineのテクスチャをロード中のプログレスバー
答えて
リソースをワーカースレッドにロードする必要があります。これを行うのに便利なユーティリティはAsyncTaskです。ガイドトピックProcesses and Threadsには、なぜこのようなものが必要なのかについての説明と、ちょうど必要なものかもしれない簡単なAsyncTask
を実行する方法を示すサンプルコードがあります。
:
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
を表示することができます。ロジックは次のとおりです。
- SMはシーンA
- SMがロード
Dialog
- SMが非同期のために各テクスチャのために(ハードウェアにすべてシーンAリソースをロードするRMに指示を示して表示するように頼まれますシーンA、texture.loadは) は
- RM "onSceneTexturesLoadCompleteは、" すべてのテクスチャがロードされていることをSMに伝える
texture.loadはテクスチャが実際にロードされることを保証しないので、TimerTask
を拡張するTryToDismissDialog
が必要です。随時このTryToDismissDialog
はシーンAテクスチャを照会し、それらが実際にロードされているかどうかをチェックします:
if (texturePack.getTexture().isLoadedToHardware()) {
texturesLoaded++;
}
すべてのテクスチャは、あなたはシーンの準備ができて表示されますDialog
と出来上がりを解任ロードされている場合。
希望します。
ps:実際にはいくつかのコード行が含まれていますが、ここでは簡単なステップ/ガイド/擬似コードを投稿しました。私は最終的な解決策を投稿しません。なぜなら、それはかなり重く、 "プロジェクトに関連している"ためです。
- 1. TexturePacker(AndEngine)でテクスチャをロード
- 2. DrawEngineのAndEngineテクスチャ
- 3. テクスチャの最大サイズ(Andengine)
- 4. ダウンロード中のプログレスバー
- 5. ロード - AndEngine GLES2で自分のプロジェクトを移植AndEngine GLES2
- 6. AndEngine - 複数のテクスチャが1つのテクスチャに重なっています
- 7. ウェブページ/アンドロイドをロード中にプログレスバーを表示する
- 8. webviewアプリをロード中に最上部にプログレスバーを表示
- 9. アイコン/プログレスバーをロードする
- 10. java - FileUtilsでダウンロード中のプログレスバー
- 11. アップロード中のAndroid Facebook SDKプログレスバー
- 12. スクロールした後にJavascriptのプログレスバーをロード
- 13. Android:Androidマーケットのようなエンドレスリストのためのプログレスバーとロード中の実装
- 14. アルファ値のみのテクスチャをロード
- 15. テクスチャをロードしていないASSIMPテクスチャ - QtのOpenGL
- 16. テクスチャをランダムにロードする
- 17. 3Dテクスチャをロード:Linux上のSDL/OpenGL Eclipse
- 18. コレクションを取得中のBackbone.jsプログレスバー
- 19. AsyncTaskファイルのダウンロード中にリストビュー内のプログレスバー
- 20. 効率的なOpenGLテクスチャのロードgxbase
- 21. プログレスバーをフレックスでロードしています
- 22. メソッド実行中のプログレスバーASP.NET MVC3 Razor
- 23. OpenGL ES 2.0動的テクスチャをロードする
- 24. XNAにテクスチャをロードするには?
- 25. OpenGLテクスチャをSDLでロードする
- 26. プログレスバーは一度だけロードします
- 27. Andengineシーンの背景を中央に配置する方法
- 28. 画像が中央にあるプログレスバー
- 29. netbeansフォームのロード中
- 30. 「ロード中」のHTTPステータスコード
実際にエンジン自体がリソースを読み込みます。私の質問は、ダイアログボックスやプログレスバーがあるときにエンジンが一時停止している理由です。手動で再開するにはどうすればいいですか? –
@Jawad Amjadが私の答えを確認します。それが役に立てば幸い ;) – GuilhE