私のゲームでは、ゲーム中にテクスチャをロードする必要があります (キャラクターのカスタマイズ画面で、さまざまなスキンをロードするため)。しかし、それを行うと、UI がブロックされます。これはコードです:
private static void loadSkinTextureRegions(){
sTexture.clearTextureAtlasSources();
sTextureRegionA = BitmapTextureAtlasTextureRegionFactory.createFromAsset(sTexture, context, getFileNameA(), 0, 0);
sTextureRegionB = BitmapTextureAtlasTextureRegionFactory.createFromAsset(sTexture, context, getFileNameB(), 0, 406);
}
そこで、「AsyncTask を使用してこのコードを実行できる」と考えました。試してみたところ、UI がブロックされなくなりましたが... テクスチャが読み込まれないことがあり、その理由がわかりません!?
スレッドをブロックせずにテクスチャを動的にロードする方法はありますか?
編集: AsyncTask を使用してテクスチャの変更を行うと、次のエラーが発生することがあります:
09-20 09:43:59.218: E/AndroidRuntime(21976): FATAL EXCEPTION: GLThread 1622
09-20 09:43:59.218: E/AndroidRuntime(21976): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
09-20 09:43:59.218: E/AndroidRuntime(21976): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
09-20 09:43:59.218: E/AndroidRuntime(21976): at java.util.ArrayList.get(ArrayList.java:308)
09-20 09:43:59.218: E/AndroidRuntime(21976): at org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas.writeTextureToHardware(BitmapTextureAtlas.java:152)
09-20 09:43:59.218: E/AndroidRuntime(21976): at org.andengine.opengl.texture.Texture.loadToHardware(Texture.java:137)
09-20 09:43:59.218: E/AndroidRuntime(21976): at org.andengine.opengl.texture.Texture.reloadToHardware(Texture.java:162)
09-20 09:43:59.218: E/AndroidRuntime(21976): at org.andengine.opengl.texture.TextureManager.updateTextures(TextureManager.java:239)
09-20 09:43:59.218: E/AndroidRuntime(21976): at org.andengine.engine.Engine.onDrawFrame(Engine.java:613)
09-20 09:43:59.218: E/AndroidRuntime(21976): at org.andengine.opengl.view.EngineRenderer.onDrawFrame(EngineRenderer.java:105)
09-20 09:43:59.218: E/AndroidRuntime(21976): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1525)
09-20 09:43:59.218: E/AndroidRuntime(21976): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1242)
同期を行うとうまく機能しますが、スレッドがブロックされて面倒です