libGDX приложение имеет определенный жизненный цикл, регулирующий состояния приложения, такие как создание, приостановка, возобновление, визуализация, утилизация.
ApplicationListener
Разработчик приложения перехватывает события жизненного цикла с помощью реализации ApplicationListener интерфейса и передачи экземпляра этой реализации в Application реализацию конкретного back-end. С этого момента libGDX приложение будет вызывать ApplicationListener каждый раз, когда будут события уровня приложения. Скелет Application реализации может выглядеть так:
public class MyGame implements ApplicationListener { public void create() { } public void render() { } public void resize(int width, int height) { } public void pause() { } public void resume() { } public void dispose() { } }
Можно наследоваться от ApplicationAdapter класса, если нужны не все методы интерфейса.
После передачи интерфейса в Application, методы ApplicationListener будут вызываться следующим образом:
Сигнатура метода | Описание |
---|---|
create() | Метод вызывается один раз при создании приложения. |
resize(int width, int height) | Этот метод вызывается при каждом изменении размера экран в игре и когда игра не находится в состоянии паузы. Вызывается один раз сразу после create() метода. Параметры новой ширины и высоты экрана в пикселях. |
render() | Метод вызывается игровым циклом приложения каждый раз, когда должны быть выполнена визуализация. Обновление логики игры обычно выполняется в этом методе. |
pause() | На Android этот метод вызывается, когда нажата кнопка Home или при входящем звонке. На Desktop этот метод вызывается при выходе из приложения, перед dispose(). Это хорошее место, чтобы сохранить состояние игры. |
resume() | Этот метод вызывается только на Android, когда приложение возобновляет работу из состояния приостановки (паузы). |
dispose() | Вызывается когда приложение уничтожено. Ему предшествует вызов pause(). |
Следующая диаграмма иллюстрирует жизненный цикл приложения:
Где главный цикл?
libGDX имеет событийный характер в основном из-за работы Android и Javascript. Явного главного цикла не существует, однако метод render() в ApplicationListener можно считать телом главного цикла.