В Phaser 3 сцена является фундаментальной единицей организации игрового процесса. Сцена представляет собой отдельный контекст, содержащий объекты, логику обновления, обработку ввода и визуальные элементы. Каждая сцена работает независимо, что позволяет эффективно структурировать игру на уровни, меню, заставки и игровые режимы.
Сцена в Phaser 3 создаётся как класс, расширяющий
Phaser.Scene. Основная структура включает:
class MainScene extends Phaser.Scene {
constructor() {
super({ key: 'MainScene' });
}
preload() {
// Загрузка ресурсов
}
create() {
// Инициализация объектов
}
update(time, delta) {
// Логика обновления сцены
}
}
time – текущее игровое время, а delta –
разница между кадрами, используемая для плавного движения объектов.Жизненный цикл сцены включает несколько ключевых событий:
Эта последовательность позволяет управлять состоянием игры на высоком уровне, изолируя логику разных элементов.
Phaser 3 предоставляет Scene Manager, который позволяет:
this.scene.start('AnotherScene');
this.scene.add('MenuScene', MenuScene);
this.scene.stop('MainScene');
this.scene.pause('MainScene');
this.scene.resume('MainScene');
Каждая сцена может взаимодействовать с другими через ключи
сцены, передавая данные через объект data.
Phaser 3 поддерживает одновременную работу нескольких сцен:
this.scene.launch('HUDScene');
update.Использование нескольких сцен позволяет строить сложные структуры игры без смешивания логики.
Данные передаются при запуске сцены или через Scene Manager:
this.scene.start('LevelScene', { level: 2, score: 500 });
В целевой сцене данные доступны через init(data):
init(data) {
this.level = data.level;
this.score = data.score;
}
Также можно использовать глобальные объекты
this.registry для хранения данных между сценами.
Phaser 3 использует систему событий для управления сценами:
События позволяют отслеживать изменения состояния и синхронизировать объекты.
Рекомендации по структуре сцены:
preload) и создание
объектов (create).update исключительно для логики, связанной
с обновлением объектов.init или
Scene Manager, избегая глобальных переменных.Сцена управляет всеми игровыми объектами и таймерами:
this.add.sprite(400, 300, 'player');
this.time.addEvent({
delay: 1000,
callback: () => console.log('Таймер сработал'),
loop: true
});
this.add – создание визуальных объектов.this.physics – работа с физикой.this.time – планирование событий и анимаций.Таким образом, сцена становится полноценной средой, где управляется весь игровой процесс.