Сцены
Единица «экрана» или «режима» в Phaser — жизненный цикл, параллельные сцены и передача данных.
Сцена — это самодостаточный мир: ей принадлежат список отображения, камера, обработчик ввода и (опционально) физический мир. Game запускает одну или несколько сцен; у каждой свой цикл обновления.
Жизненный цикл
| Хук | Когда выполняется | Типичное применение |
|---|---|---|
init(data) | Один раз, перед preload. Получает данные от scene.start. | Чтение параметров, сброс полей класса. |
preload() | Один раз, перед create. Загрузчик отрабатывает до конца. | Постановка ресурсов в очередь загрузки. |
create(data) | Один раз. Загрузчик завершил работу. | Построение графа сцены. |
update(t, d) | Каждый кадр после create. | Покадровая логика. |
shutdown() | Когда сцена останавливается (например, scene.stop, scene.start другой сцены). | Снятие слушателей, таймеров, звуков, твинов, запущенных в create. |
destroy() | Когда сцена окончательно удаляется из игры. | Финальная очистка; редкость в приложениях, которые просто переключаются между сценами. |
Сцена, которая была остановлена и затем запущена снова, увидит повторный вызов init / preload / create — соотносите каждый shutdown с тем create, после которого он наводит порядок.
Несколько сцен одновременно
Сцены не являются взаимоисключающими. Распространённые шаблоны:
- Постоянная сцена HUD работает параллельно с игровой сценой.
- Сцена меню паузы располагается поверх; игровая сцена приостановлена, но не остановлена.
- Долгоживущая сцена аудио или сохранений существует исключительно ради сквозного состояния.
// Запустить геймплей, затем наложить HUD сверху.
this.scene.start('Game');
this.scene.launch('HUD');
scene.start(key) заменяет текущую сцену; scene.launch(key) запускает новую сцену рядом с ней.
Передача данных между сценами
this.scene.start('Game', { level: 3, seed: 0xdead });
// Внутри Game:
init(data: { level: number; seed: number }) {
this.level = data.level;
}
Для сквозного состояния, которое переживает любую отдельную сцену (профиль игрока, настройки, данные сохранений), используйте реестр сцены (registry) или обычное хранилище уровня модуля. Энциклопедия рекомендует обычное хранилище, если только вам специально не нужна интеграция с событиями сцен.
Связанные темы
- Игровой цикл — откуда вызывается
update. - Игровые объекты — что содержит список отображения сцены.