Приложение загружает неправильные текстуры при открытии снова

Я разрабатываю игру, используя библиотеку libgdx.

Когда я загружаю программу в первый раз, текстуры загружаются отлично, и все в порядке

Введите описание изображения здесь

Когда я закрываю приложение и загружаю его снова (я предполагаю, что Android каким-то образом кэширует его из памяти) – загружаются неправильные текстуры.

Введите описание изображения здесь

Если я очищу игру из истории и повторю попытку, она отлично работает.

– Сейчас он работает так: я использую SpriteBatch для рисования реальной игры. У меня есть отдельный SpriteBatche чтобы рисовать фон и интерфейс (которые загружаются просто отлично). При удалении уровня я распоряжаюсь SpriteBatch .

 for (Block block : world.getDrawableBlocks(this.width, this.height)) { spriteBatch.draw(block.getTexture(1f), block.getPosition().x, block.getPosition().y, block.SIZE_X, block.SIZE_Y); } 

Текстуры, которые я загружаю с использованием кеша, я написал сам, чтобы предотвратить загрузку одного и того же изображения более одного раза. Я очищаю кеш при создании приложения. Затем я сохраняю объект Texture / TextureRegion в самом объекте, который получается через .getTexture()

И вот мой код, который я использую для загрузки текстур

 public static Texture loadTexture(String path) { //Do we have the texture cached? if (textures.containsKey(path)) { //return it return textures.get(path); } else { //load it from the filesystem Texture texture = new Texture(Gdx.files.internal(path)); //cache it textures.put(path, texture); //return it return texture; } } 

Я подключил отладчик и загружаемые текстуры. У нас есть правильный путь.

В примере с рисунком текстура, подлежащая обмену, является частью шрифта, который ничего не хранит в моем кеше.

Итак, я довольно застрял здесь.

Прямо сейчас я использую непослушное решение убить процесс вручную в распоряжении:

  @Override public void onDestroy() { super.onDestroy(); this.finish(); android.os.Process.killProcess( android.os.Process.myPid() ); } 

Это работает, но довольно грязно.

Когда процесс выходит из строя из-за исключения, ошибка не возникает.


Я предполагаю, что каким-то образом библиотека кэширует свои собственные текстуры, которые каким-то образом повреждаются, но я не знаю, как проверить и как их очистить.

Итак, какие-то идеи?

Solutions Collecting From Web of "Приложение загружает неправильные текстуры при открытии снова"

Вам необходимо удалить () все созданные вами Текстуры, чтобы textures перебирали все его значение () и удаляли его по отдельному методу, а затем использовали этот метод в функции dispose () главной игры.

Коммутируемая текстура кажется BitmapFont, и если эти текстуры шрифтов используются в пользовательском интерфейсе, то вы можете ошибаться в сценарии пользовательского интерфейса или так, также вы загружаете файл JSON?

Мне кажется, что когда вы закрываете игру, ваша последняя текстура используется для текстуры шрифта, и она заполняет текстуру, используемую на сцене.

«Новая текстура», TextureAtlas, BitmapFont и т. Д. Автоматически перезагружаются после паузы / возобновления или когда OpenGL-контекст в противном случае теряется.

Я предполагаю, что ваша проблема должна быть в том, как вы справляетесь с ручной перезагрузкой.

Если вы хотите, чтобы текстура не загружалась более одного раза, вместо этого используйте AssetManager . Не нужно делать все это вручную.