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 можно считать телом главного цикла.