Phaser 3 представляет собой мощный игровой фреймворк для JavaScript,
построенный вокруг концепции сцен (Scenes) и
игровых объектов (Game Objects). Центральной точкой
является объект Phaser.Game, который управляет всеми
системами, включая рендеринг, обновление логики и обработку ввода.
Архитектура Phaser разделена на модули, что обеспечивает гибкость и
масштабируемость проектов.
Phaser.GameОбъект Phaser.Game создаётся с конфигурационным
объектом, который задаёт:
type): WebGL или
Canvas.width,
height).scene): массив или одиночная
сцена.physics): поддержка Arcade,
Matter.js и других движков.Пример конфигурации:
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
physics: {
default: 'arcade',
arcade: { gravity: { y: 300 }, debug: false }
},
scene: [BootScene, MainScene]
};
const game = new Phaser.Game(config);
Сцена (Scene) — это изолированное состояние
игры, которое управляет ресурсами, объектами и логикой. Каждая
сцена имеет несколько ключевых методов:
preload() — загрузка ресурсов.create() — инициализация игровых объектов.update(time, delta) — обновление логики на каждом
кадре.Сцены могут переключаться, останавливаться и возобновляться, что позволяет создавать сложные переходы и меню.
class MainScene extends Phaser.Scene {
constructor() {
super({ key: 'MainScene' });
}
preload() {
this.load.image('player', 'assets/player.png');
}
create() {
this.player = this.add.sprite(400, 300, 'player');
}
update(time, delta) {
this.player.x += 1;
}
}
Phaser 3 использует иерархию объектов, где базовый
класс — GameObject. Основные категории объектов:
Sprite) — изображения с
поддержкой анимации.Text) — отображение
текста.Group) — коллекции объектов
для массового управления.Container) — позволяют
объединять объекты в иерархию с общей трансформацией.Контейнеры упрощают управление сложными структурами, например, персонажем с оружием и эффектами:
const container = this.add.container(100, 100);
const playerSprite = this.add.sprite(0, 0, 'player');
const weaponSprite = this.add.sprite(20, 0, 'weapon');
container.add([playerSprite, weaponSprite]);
Phaser 3 имеет встроенные менеджеры ввода, которые обрабатывают клавиатуру, мышь и сенсорные события. Ввод интегрирован с объектами через:
this.input.keyboard — клавиши и события.this.input.mouse — мышь, движение, клики.this.input.pointer — указатели, касания на мобильных
устройствах.Пример движения спрайта с помощью клавиш:
const cursors = this.input.keyboard.createCursorKeys();
update() {
if (cursors.left.isDown) this.player.x -= 5;
if (cursors.right.isDown) this.player.x += 5;
if (cursors.up.isDown) this.player.y -= 5;
if (cursors.down.isDown) this.player.y += 5;
}
Phaser 3 поддерживает несколько движков физики, каждый с собственными характеристиками:
Физические объекты создаются через
this.physics.add.sprite и могут иметь свойства:
body.velocity — скорость движения.body.acceleration — ускорение.body.collideWorldBounds — ограничение по границам
канваса.this.player = this.physics.add.sprite(100, 100, 'player');
this.player.setCollideWorldBounds(true);
this.player.setBounce(0.5);
Phaser использует циклическое обновление, где каждая
сцена вызывается через метод update(time, delta). Время
между кадрами (delta) позволяет создавать плавную
анимацию, независимую от FPS.
Для событий с задержкой и повторов применяются:
this.time.addEvent({ delay, callback, loop })this.time.delayedCall(delay, callback)Пример таймера с повтором:
this.time.addEvent({
delay: 1000,
callback: () => console.log('Tick'),
loop: true
});
Phaser 3 разделяет управление ресурсами на Loaders:
this.load.image() — изображения.this.load.spritesheet() — спрайт-листы.this.load.audio() — звуки и музыка.this.load.json() — данные уровня или конфигурации.Ресурсы могут быть загружены асинхронно, а сцена автоматически ожидает завершения загрузки.
Phaser 3 построен на событийной архитектуре, позволяющей реагировать на действия объектов, сцены или глобальные события. Основные методы:
scene.events.on(event, callback) — слушатель событий
сцены.this.input.on('pointerdown', callback) — обработка
пользовательского ввода.this.time.events.on('complete', callback) — события
таймера.События позволяют строить гибкую логику без жёсткой зависимости объектов друг от друга.
Эта архитектура делает Phaser 3 гибким инструментом для создания как простых аркад, так и сложных многосценных игр с динамическими объектами, физикой и полноценным управлением ресурсами.