Phaser изначально был создан как библиотека для разработки 2D-игр на
JavaScript с открытым исходным кодом, ориентированная на высокую
производительность в браузере и простоту использования. Первая версия,
известная как Phaser 2 (или Phaser CE — Community
Edition), появилась в 2013 году и быстро завоевала популярность среди
разработчиков благодаря своей легкости и широкому набору встроенных
инструментов.
Архитектура Phaser 2
Phaser 2 использовал Canvas и WebGL для рендеринга
графики, автоматически выбирая подходящий метод в зависимости от
возможностей браузера. Основные компоненты архитектуры включали:
- Game Object Factory — объектная фабрика для
создания спрайтов, текстов, групп и других элементов.
- State Manager — система управления состояниями игры
(например, меню, уровень, экран загрузки), обеспечивающая плавный
переход между ними.
- Input System — обработка клавиатуры, мыши и
сенсорных событий.
- Physics Engines — встроенные физические движки,
включая Arcade Physics, P2JS и Ninja Physics.
- Loader — асинхронная загрузка ресурсов с поддержкой
кеширования.
Особенностью Phaser 2 была простота и модульность: разработчик мог
быстро создавать прототипы, не вдаваясь в низкоуровневые детали
рендеринга и управления ресурсами.
Ограничения и причины
перехода к Phaser 3
Несмотря на популярность, Phaser 2 имел ряд архитектурных
ограничений:
- Ограниченная гибкость рендеринга. Canvas и WebGL
использовались через единый абстрактный слой, что усложняло оптимизацию
для сложных проектов.
- Система состояний часто ограничивала сложные
переходы и управление множественными сценами одновременно.
- Монолитная структура. Большинство компонентов были
тесно связаны между собой, что затрудняло масштабирование.
- Слабая поддержка современных стандартов ES6 и
модульной системы.
Эти ограничения стали стимулом для полной переработки библиотеки, что
привело к созданию Phaser 3.
Архитектура Phaser 3
Phaser 3, выпущенный в 2018 году, представляет собой полностью
переписанную версию библиотеки с акцентом на модульность, расширяемость
и производительность. Основные изменения включают:
- Scene System — новая система управления сценами,
позволяющая одновременно запускать несколько сцен, накладывать UI на
игровой мир, легко управлять их жизненным циклом.
- Event-driven архитектура. Phaser 3 использует
события для всех ключевых операций: создание объектов, взаимодействие с
пользователем, коллизии. Это упрощает реактивное программирование.
- Модульная структура. Каждый компонент — отдельный
модуль: рендеринг, физика, анимации, загрузка ресурсов. Это облегчает
кастомизацию и интеграцию сторонних библиотек.
- Современный рендеринг WebGL с fallback на Canvas.
Полная поддержка шейдеров, масок, камер и эффектов постобработки.
- Расширенный физический движок Arcade Physics, а
также интеграция с Matter.js для сложной физики.
- Поддержка ES6 и npm-пакетов, что позволяет легко
подключать Phaser 3 в современные сборщики (Webpack, Parcel, Vite).
Сравнение подходов к
созданию объектов
В Phaser 2 создание спрайтов выглядело так:
var sprite = game.add.sprite(100, 100, 'player');
Phaser 3 применяет современный объектно-ориентированный подход через
сцену:
class MyScene extends Phaser.Scene {
create() {
this.player = this.add.sprite(100, 100, 'player');
}
}
Это позволяет легко управлять объектами внутри сцены, использовать
группы, контейнеры и слои, а также связывать объекты с событиями.
Улучшения работы с
ресурсами и анимацией
Phaser 3 ввел Asset Loader с продвинутыми
возможностями:
- Загрузка спрайтшитов, текстурных атласов и анимаций через JSON.
- Поддержка прогресс-индикаторов и коллбеков для различных типов
ресурсов.
- Возможность динамического добавления ресурсов во время игры.
Анимации теперь строятся через отдельный Animation
Manager, который управляет циклом кадров, смешением анимаций и
настройкой повторов, что значительно упрощает создание сложных
персонажей и эффектов.
Поддержка расширений и
сообществом
Phaser 3 стал более открытым для сторонних расширений:
- Появились плагины для управления камерой, UI-компонентами и игровыми
эффектами.
- Сообщество создает готовые решения для физики, сетевой синхронизации
и процедурной генерации уровней.
- Улучшена документация с примерами на современном JavaScript и
TypeScript.
Phaser 3 обеспечивает современный, модульный и
производительный фундамент для разработки как простых
браузерных игр, так и сложных мультимедийных проектов, сохраняя при этом
простоту использования, за которую библиотека ценится с версии 2.