LibGDX на функции возобновления
У меня проблемы с потерей контекста OpenGL ES в LibGDX, поэтому я пытаюсь выяснить, как решить эту проблему. Моим первым шагом было на самом деле заново инициализировать все мои текстуры, когда функция возобновления вызывается в одном из моих классов, который расширяет Screen. Как это:
@Override
public void resume() {
Tile.initTiles();
}
Функция возобновления воссоздает все мои плитки (включая их текстуры), поэтому я подумал, что это сработает. Однако согласно документации: ApplicationListener Docs
Функция возобновления никогда не должна вызываться на рабочем столе. Теперь, возобновление никогда не вызывается на моем телефоне Android, но на моем рабочем столе я говорю программе печатать "true" на консоли в методе резюме, и вуаля, функция возобновления фактически вызывается на рабочем столе.
Мои основные вопросы:
- Почему функция возобновления вызова вызывается на моем рабочем столе, а не на моем телефоне Android?
- Как я могу перезагрузить мои текстуры в резюме для моего телефона Android? В настоящее время мои текстуры становятся белыми при возобновлении игры после нажатия клавиши "Назад". Интересно, что текстуры хорошо перезагружаются при выходе из кнопки home.
1 ответ
Я быстро объясню, как я это делаю, и до сих пор у меня все получалось без проблем как на десктопе, так и на Android.
Прежде всего я использую AssetManager
для всех моих активов, в том числе Texture
, Я обычно загружаю все свои активы перед тем, как перейти к реальному экрану игрового процесса через экран загрузки. Но это также должно работать, когда вы загружаете их в свой Screen.show()
метод.
Всякий раз, когда мне нужен актив, единственный способ получить их через AssetManager.get(...)
, мой AssetManager
на самом деле public static
член базового класса игры, так что к нему можно получить доступ из любого места в моем коде, и есть только один из них.
В моем Screen.resume()
метод я положил AssetManager.finishLoading()
Хотя я не уверен, что это действительно необходимо.
Сразу после запуска игры и ваш AssetManager
создается экземпляр, я вызываю статический метод Texture.setAssetManager(...)
,
Это закрывает круг. Когда на Android ваш OGL-контекст теряется, LibGDX фактически оживит его для вас. Так как вы установили AssetManager
для тебя Textures
Менеджер сможет найти текстуры после их перезагрузки. AssetManager.finishLoading()
будет ждать, пока перезагрузка не будет завершена. После этого все должно работать как до потери контекста.
Зачем Screen.resume()
не называется, я не могу сказать. Для меня это называется на Android. Может быть, вам нужно обновить версию LibGDX.