Phaser — это мощная библиотека для создания 2D-игр на JavaScript, основанная на концепции сцен (Scenes) и объектов игрового мира. Любой проект в Phaser состоит из нескольких ключевых компонентов:
Конфигурация игры (GameConfig)
Определяет параметры и поведение игры на старте:
type — рендерер (Phaser.AUTO, Phaser.CANVAS,
Phaser.WEBGL)width и height — размеры канвасаphysics — настройки физического движкаscene — массив сцен или одиночная сценаconst config = {
type: Phaser.AUTO,
width: 800,
height: 600,
physics: {
default: 'arcade',
arcade: {
gravity: { y: 300 },
debug: false
}
},
scene: [BootScene, MainScene, UIScene]
};
const game = new Phaser.Game(config);Сцены (Scenes) Сцена представляет собой отдельный этап или экран игры: загрузка ресурсов, главный уровень, меню, экран победы/поражения. Основные методы сцены:
preload() — загрузка ассетов (спрайтов, аудио,
шрифтов)create() — инициализация объектов, настройка физики,
создание анимацийupdate(time, delta) — обновление состояния сцены каждый
кадрКаждая сцена наследует Phaser.Scene и может управляться через методы
this.scene.start(), this.scene.pause(),
this.scene.stop().
Ассеты и менеджеры загрузки Phaser предоставляет
встроенный загрузчик через this.load. Поддерживаются
форматы:
image, spritesheet)atlas)audio, audioSprite)Загрузка должна происходить в методе preload():
preload() {
this.load.image('player', 'assets/player.png');
this.load.spritesheet('explosion', 'assets/explosion.png', { frameWidth: 64, frameHeight: 64 });
this.load.audio('bgm', 'assets/music.mp3');
}Структура типового проекта делится на несколько каталогов:
/src
/scenes
BootScene.js
MainScene.js
UIScene.js
/sprites
player.png
enemy.png
/audio
bgm.mp3
sfx.wav
/animations
explosion.json
/js
main.js
scenes — отдельные сцены игры, каждая в своем
файлеsprites и audio — хранилища ассетовanimations — JSON-файлы с данными анимацийjs/main.js — точка входа, создание конфигурации и
экземпляра Phaser.GameТакое разделение упрощает масштабирование проекта, повторное использование кода и поддержку.
Phaser разделяет объекты на несколько типов:
Sprite) — базовый визуальный
объект, может иметь физику и анимациюGroup) — коллекции объектов,
которые можно обновлять или проверять на столкновения вместеContainer) — позволяют
объединять несколько объектов в один логический блокTilemap) — для создания уровней
на основе тайловой сеткиПример создания группы врагов:
this.enemies = this.physics.add.group({
key: 'enemy',
repeat: 5,
setXY: { x: 100, y: 0, stepX: 120 }
});
Phaser поддерживает несколько движков: Arcade, Matter, Impact. Наиболее часто используется Arcade:
body.velocity,
body.gravity, body.collideWorldBoundsПример настройки столкновений:
this.physics.add.collider(this.player, this.enemies, this.hitEnemy, null, this);
Анимации создаются через менеджер this.anims и могут
быть назначены спрайтам:
this.anims.create({
key: 'walk',
frames: this.anims.generateFrameNumbers('player', { start: 0, end: 5 }),
frameRate: 10,
repeat: -1
});
this.player.anims.play('walk');
Использование повторов, скоростей кадров и событий анимаций позволяет создавать динамичные эффекты и реакции на действия игрока.
Input) — клавиатура, мышь,
сенсорный экран:this.cursors = this.input.keyboard.createCursorKeys();
if (this.cursors.left.isDown) { this.player.setVelocityX(-160); }
DOM Elements или
Text) — для отображения очков, жизней,
диалогов:this.scoreText = this.add.text(16, 16, 'Score: 0', { fontSize: '32px', fill: '#fff' });
Крупные проекты разбиваются на сцены и модули с использованием ES6 модулей:
import BootScene from './scenes/BootScene.js';
import MainScene from './scenes/MainScene.js';
const config = { scene: [BootScene, MainScene] };
const game = new Phaser.Game(config);
Это позволяет:
Для сложных платформеров и RPG часто применяются Tilemaps:
layers) и объекты
(objects)Пример загрузки карты:
const map = this.make.tilemap({ key: 'level1' });
const tileset = map.addTilesetImage('tiles', 'tilesImage');
const platforms = map.createLayer('Platforms', tileset, 0, 0);
platforms.setCollisionByExclusion([-1]);
Крупные игры на Phaser строятся с использованием:
GameStateТакой подход позволяет поддерживать проект, добавлять новые уровни, анимации и игровые механики без необходимости переписывать существующий код.