ゲームの黒い画面を起動すると、リソースがロードされているためにしばらく時間がかかります。 私は徹底的にチュートリアルを進め、進行中のバーを表示する方法を示しました。しかし、問題はプログレスバーが目に見えているときに他のものが停止しているときです。そして何も起こらない。黒い画面と進行状況バーが表示されます。なぜすべてのものが一時停止しているのか、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. ロード - AndEngine GLES2で自分のプロジェクトを移植AndEngine GLES2
- 5. AndEngine - 複数のテクスチャが1つのテクスチャに重なっています
- 6. httpUploadProgress中のプログレスバー
- 7. ダウンロード中のプログレスバー
- 8. Android webViewを停止する方法swipeToRefreshロード中のプログレスバー?
- 9. プログレスバー100%ロード時
- 10. ウェブページ/アンドロイドをロード中にプログレスバーを表示する
- 11. webviewアプリをロード中に最上部にプログレスバーを表示
- 12. Android:カスタムアダプタasyncでリストビューをロードし、OnCreateでロード中にプログレスバーを表示
- 13. アイコン/プログレスバーをロードする
- 14. AndEngine:エンティティの一部である前にテクスチャの色を変更するには
- 15. java - FileUtilsでダウンロード中のプログレスバー
- 16. アップロード中のAndroid Facebook SDKプログレスバー
- 17. テクスチャをロードしていないASSIMPテクスチャ - QtのOpenGL
- 18. スクロールした後にJavascriptのプログレスバーをロード
- 19. RecyclerViewの画像をロードするプログレスバー
- 20. RadGridデータをロードする際のプログレスバー
- 21. アルファ値のみのテクスチャをロード
- 22. テクスチャをランダムにロードする
- 23. Android:Androidマーケットのようなエンドレスリストのためのプログレスバーとロード中の実装
- 24. objのテクスチャをロードするには?
- 25. 3Dテクスチャをロード:Linux上のSDL/OpenGL Eclipse
- 26. インストール中にプログレスバーを隠す
- 27. メソッドの実行中にプログレスバーを表示
- 28. コレクションを取得中のBackbone.jsプログレスバー
- 29. 効率的なOpenGLテクスチャのロードgxbase
- 30. OBJのテクスチャはロードされません
実際にエンジン自体がリソースを読み込みます。私の質問は、ダイアログボックスやプログレスバーがあるときにエンジンが一時停止している理由です。手動で再開するにはどうすればいいですか? –
@Jawad Amjadが私の答えを確認します。それが役に立てば幸い ;) – GuilhE