Подтвердить что ты не робот

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

Я разрабатываю игру, используя библиотеку 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()  ); 
    }

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

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


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

Итак, любые идеи?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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