2013-09-19 2 views
0

В моей игре мне нужно загрузить текстуры во время игры (на экране настройки персонажа, для загрузки различных скинов). Но когда я это делаю, пользовательский интерфейс блокируется. Это код:AndEngine: динамически загружать текстуры во время игры

private static void loadSkinTextureRegions(){ 
    sTexture.clearTextureAtlasSources(); 
    sTextureRegionA = BitmapTextureAtlasTextureRegionFactory.createFromAsset(sTexture, context, getFileNameA(), 0, 0); 
    sTextureRegionB = BitmapTextureAtlasTextureRegionFactory.createFromAsset(sTexture, context, getFileNameB(), 0, 406); 
} 

Поэтому я подумал: «Я могу запустить этот код с помощью AsyncTask». Поэтому я попробовал, и теперь пользовательский интерфейс не заблокирован, но ... иногда текстуры не загружаются и не знают почему !?

Есть ли способ загрузить текстуры динамически без блокировки потока?

Edit: Выполнение изменения текстуры с помощью 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) 

Если я делаю это синхронным, работает хорошо, но он блокирует поток, и это раздражает

+0

Как вы уверены, что текстуры не загружаются? Вы заметили шаблон, когда загрузка оказалась неудачной? – Prmths

+0

Текстуры не загружаются, потому что спрайт исчезает. Я не заметил никакой картины. Я надел кнопку для изменения текстуры, и я касаюсь ее несколько раз, поэтому текстура меняется каждый раз, когда я ее касаюсь, а иногда спрайт исчезает, и если я снова нажимаю кнопку, спрайт снова становится видимым :( –

+0

Можете ли вы опубликовать весь код Logcat? Это не указывает на какой-либо из вашего кода. – Prmths

ответ

0

Попытка загрузить текстуры после каждого создания текстуры Регионы. в вашем случае

 private static void loadSkinTextureRegions(){ 
     sTexture.clearTextureAtlasSources(); 
     sTextureRegionA = BitmapTextureAtlasTextureRegionFactory.createFromAsset(sTexture, context, getFileNameA(), 0, 0); 
     sTextureRegionB = BitmapTextureAtlasTextureRegionFactory.createFromAsset(sTexture, context, getFileNameB(), 0, 406); 
sTexture.load(); 

    } 

, а также Youcan место loadSkinTextureRegions() в UIThread.

+0

Спасибо, но это То же самое. Иногда спрайт исчезает (когда я делал изменение текстуры) :( –

Смежные вопросы