Приложение снова загружает неправильные текстуры при открытии
Я разрабатываю игру, используя библиотеку libgdx.
Когда я загружаю программу в первый раз, текстуры загружаются отлично, и все в порядке
![enter image description here]()
Когда я закрываю приложение и загружаю его снова (я предполагаю, что Android каким-то образом кэширует его из памяти) - загружаются неправильные текстуры.
![enter image description here]()
Если я очищу игру из истории и повторю попытку, она отлично работает.
-
Теперь он работает следующим образом: я использую 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() );
}
Это работает, но довольно грязно.
Когда процесс выходит из строя из-за исключения, ошибка не возникает.
Я предполагаю, что так или иначе библиотека кэширует свои собственные текстуры, которые как-то повреждаются, но я понятия не имею, как проверить и как их очистить.
Итак, любые идеи?
Ответы
Ответ 1
Вам нужно Dispose() все созданные вами Текстуры, для textures
выполнить цикл через все его значение() и удалить его по отдельному методу, затем использовать этот метод в функции dispose() главного экрана игры.
коммутируемая текстура кажется BitmapFont, и если текстуры шрифтов используются в пользовательском интерфейсе, то вы можете ошибаться в сценарии пользовательского интерфейса или так, также вы загружаете файл JSON?
мне кажется, что когда вы закрываете игру, ваша последняя текстура использует текстуру шрифта, и она заполняет текстуру, используемую на сцене.
Ответ 2
"Новая текстура", TextureAtlas, BitmapFont и т.д. автоматически перезагружаются после паузы/возобновления или когда в противном случае теряется контекст OpenGL.
Я предполагаю, что ваша проблема должна быть в том, как вы справляетесь с ручной перезагрузкой.
Если вы хотите, чтобы текстура не загружалась более одного раза, вместо этого используйте AssetManager. Не нужно делать все это вручную.