Phaser — мощная библиотека для создания 2D-игр на JavaScript, построенная вокруг концепции жизненного цикла сцены. Понимание последовательности и назначения ключевых методов жизненного цикла позволяет управлять загрузкой ресурсов, инициализацией объектов и логикой игры.
Метод boot (или сцена начальной инициализации) отвечает
за предварительную подготовку окружения игры. На этом
этапе можно:
scale), ориентацию
и адаптацию к экрану.resize) или ввода с клавиатуры и мыши.Boot-сцена обычно не содержит визуальных объектов или ресурсов, она только задаёт структурные основы игры.
class BootScene extends Phaser.Scene {
constructor() {
super({ key: 'BootScene' });
}
preload() {
// Здесь можно загрузить минимальные ассеты для экрана загрузки
this.load.image('loadingBar', 'assets/loading.png');
}
create() {
this.scene.start('PreloadScene');
}
}
Ключевой момент: Boot-сцена всегда короткая и минималистичная, её цель — подготовка, а не сама игра.
Сцена preload отвечает за загрузку всех игровых
ресурсов: текстур, спрайтов, звуков, шрифтов. Phaser
предоставляет мощные методы для организации асинхронной загрузки с
визуальной индикацией прогресса.
this.load.image(key, url) — загрузка одиночного
изображения.this.load.spritesheet(key, url, config) — загрузка
спрайт-листа с указанием ширины и высоты кадров.this.load.audio(key, url) — загрузка звукового
файла.this.load.bitmapFont(key, textureURL, fontDataURL) —
загрузка шрифтов для отрисовки текста.class PreloadScene extends Phaser.Scene {
constructor() {
super({ key: 'PreloadScene' });
}
preload() {
const progressBar = this.add.graphics();
const progressBox = this.add.graphics();
progressBox.fillStyle(0x222222, 0.8);
progressBox.fillRect(240, 270, 320, 50);
this.load.on('progress', (value) => {
progressBar.clear();
progressBar.fillStyle(0xffffff, 1);
progressBar.fillRect(250, 280, 300 * value, 30);
});
this.load.on('complete', () => {
progressBar.destroy();
progressBox.destroy();
});
this.load.image('player', 'assets/player.png');
this.load.image('background', 'assets/background.png');
this.load.audio('theme', 'assets/theme.mp3');
}
create() {
this.scene.start('MainScene');
}
}
Особенность preload: сцена блокирует
выполнение до полной загрузки всех ресурсов, что предотвращает появление
пустых объектов на экране.
Метод create используется для инициализации
игровых объектов и сцены после загрузки ресурсов. Здесь:
this.add.sprite,
this.physics.add.group).velocity,
collideWorldBounds, gravity).Пример создания спрайта игрока с физикой:
class MainScene extends Phaser.Scene {
constructor() {
super({ key: 'MainScene' });
}
create() {
this.add.image(400, 300, 'background');
this.player = this.physics.add.sprite(100, 450, 'player');
this.player.setBounce(0.2);
this.player.setCollideWorldBounds(true);
this.cursors = this.input.keyboard.createCursorKeys();
this.sound.play('theme', { loop: true });
}
}
Важная особенность: create вызывается один раз, сразу после завершения preload. Все объекты создаются готовыми к взаимодействию.
Метод update — это сердце игрового
цикла, вызывается на каждом кадре игры (обычно 60 раз в
секунду). Здесь реализуется логика движения, взаимодействия объектов,
проверка столкновений и обработка ввода.
Пример управления игроком с помощью клавиш:
update() {
if (this.cursors.left.isDown) {
this.player.setVelocityX(-160);
} else if (this.cursors.right.isDown) {
this.player.setVelocityX(160);
} else {
this.player.setVelocityX(0);
}
if (this.cursors.up.isDown && this.player.body.touching.down) {
this.player.setVelocityY(-330);
}
}
Особенности update:
create.this.physics.add.collider).Phaser поддерживает несколько сцен, каждая со своим
циклом boot → preload → create → update. Сцены могут:
scene.start,
scene.stop).scene.launch).Пример передачи данных при переходе сцены:
this.scene.start('NextScene', { score: 100 });
В следующей сцене эти данные доступны через
this.scene.settings.data.score.
Жизненный цикл boot → preload → create → update
обеспечивает структурированную последовательность работы
игры: подготовка среды, загрузка ресурсов, создание объектов и
динамическая логика на каждом кадре. Понимание этого цикла позволяет
строить масштабируемые и оптимизированные игры на Phaser с чёткой
организацией сцен и ресурсов.