javascript42
Главная
Все учебники
Блог
Учебник Phaser
Введение в Phaser
Что такое Phaser и для каких задач он подходит
История развития библиотеки: от Phaser 2 к Phaser 3
Сравнение с другими игровыми фреймворками
Архитектурные принципы Phaser 3
Требования к окружению разработки
Установка через npm и подключение через CDN
Настройка проекта с Webpack и Vite
Структура типового проекта
Первый запуск: минимальная конфигурация игры
Конфигурация и жизненный цикл игры
Объект конфигурации Phaser.Game
Типы рендеров: WebGL, Canvas, AUTO
Параметры размера и масштабирования
Настройка физических движков в конфигурации
Жизненный цикл игры: boot, preload, create, update
Объект Game и глобальный доступ к нему
Управление паузой и остановкой игры
Уничтожение экземпляра игры
Обработка ошибок инициализации
Сцены
Концепция сцены в Phaser 3
Создание сцены через класс и через объект-конфиг
Ключи сцен и их уникальность
Методы жизненного цикла сцены: init, preload, create, update, shutdown, destroy
SceneManager: добавление, запуск и остановка сцен
Параллельные сцены и наложение сцен
Передача данных между сценами через init
Переходы и эффекты при смене сцен
Сцены-оверлеи для UI и паузы
Взаимодействие между активными сценами
Порядок отрисовки сцен
Загрузка ресурсов
Загрузчик Phaser.Loader и его события
Загрузка изображений и атласов
Загрузка спрайтлистов: параметры сетки кадров
Форматы текстурных атласов: JSON Array, JSON Hash, XML
Загрузка аудио: форматы и приоритеты
Загрузка шрифтов: Bitmap-шрифты и Web Fonts
Загрузка JSON, XML и текстовых файлов
Загрузка тайловых карт: Tiled, CSV
Загрузка шейдеров GLSL
Загрузка видео
Базовые пути и кросс-доменная загрузка
Прогресс-бар загрузки
Кэширование ресурсов и повторная загрузка
Динамическая подгрузка ресурсов во время игры
Обработка ошибок загрузки
Текстуры, атласы и фреймы
TextureManager: устройство и API
Создание текстуры из Canvas
Динамическое создание текстур через RenderTexture
Работа с фреймами внутри атласа
Обрезка и паддинг фреймов
Замена текстуры у объекта во время выполнения
Генерация атласов в инструментах TexturePacker и Shoebox
Процедурная генерация текстур
Игровые объекты
Иерархия классов игровых объектов
GameObject: базовые свойства и методы
Image: статичные изображения
Sprite: спрайты с анимацией
TileSprite: повторяющийся спрайт
RenderTexture: рисование на текстуре в реальном времени
Zone: невидимая интерактивная область
Mesh: объект с произвольной геометрией
Plane: деформируемая плоскость
NineSlice: масштабируемые рамки
Rope: вервёвкообразный объект
Video: видео как игровой объект
Группы объектов: Group и GameObjectFactory
Контейнеры: Container и вложенные трансформации
Layer: управление порядком отрисовки
Уничтожение объектов и очистка памяти
Трансформации и пространство координат
Позиционирование: x, y, setPosition
Начало координат объекта: origin и setOrigin
Масштаб: scaleX, scaleY, setScale
Поворот: angle, rotation
Глубина объекта: depth и setDepth
Локальные и мировые координаты
Трансформации внутри контейнеров
Матрица трансформации
Преобразование координат между сценой и экраном
Камера
Основная камера сцены
CameraManager и несколько камер
Привязка камеры к объекту: startFollow
Зона мёртвой точки при следовании
Ограничение движения камеры: setBounds
Зум камеры: setZoom
Повороот камеры
Эффекты камеры: shake, flash, fade, pan, zoomTo
Отсечение объектов по камере
Маски камеры
Ignore-список объектов для конкретной камеры
Рендер в текстуру через камеру
Система анимаций
AnimationManager: глобальный реестр анимаций
Создание анимации: ключ, фреймы, частота
Генерация фреймов: generateFrameNumbers, generateFrameNames
Воспроизведение анимации: play, resume, pause, stop
Параметры анимации: repeat, repeatDelay, yoyo, delay
Реверс и замедление анимации
Цепочки анимаций
События анимации: start, repeat, complete, animationupdate
AnimationState и управление через компонент
Анимации по ключам атласа
Создание анимации из разных текстур
Физика: Arcade Physics
Общая архитектура физических систем в Phaser
Включение Arcade Physics и настройка гравитации
Статические и динамические тела
ArcadeBody: свойства velocity, acceleration, drag
Гравитация на уровне тела
Ограничение движения: setCollideWorldBounds
Хитбокс тела: setSize, setOffset
Проверка перекрытий: overlap
Проверка столкновений: collider
Группы и коллайдеры между группами
Коллизии с тайловыми картами
Разделители: setAllowGravity, setImmovable
Отладочный рендер физических тел
Оптимизация: пространственный хэш и квадродерево
Физика: Matter.js
Подключение и настройка Matter.js в Phaser
Тела Matter: прямоугольники, круги, многоугольники
Составные тела и группы частей
Свойства материала: трение, упругость, плотность
Суставы и ограничители: Constraint
Столкновения в Matter: collisionstart, collisionend
Фильтрация столкновений: category и mask
Статические тела и сенсоры
Интеграция с тайловыми картами
Отладочный рендер Matter
Собственные физические тела по вертексам
Тайловые карты
Формат Tiled и экспорт в JSON
Загрузка и создание тайловой карты в Phaser
Тайлсеты: добавление и настройка
Слои тайлов: TilemapLayer
Слои объектов и их обработка
Свойства тайлов и слоёв
Коллизии тайлов: setCollisionByProperty, setCollisionBetween
Динамическая замена тайлов
Мультислойные карты
Изометрические и гексагональные карты
Создание тайловых карт динамически из массива
Бесконечные карты и прокрутка
Ввод и взаимодействие
InputManager и InputPlugin сцены
Клавиатура: addKey, createCursorKeys, isDown
Комбинации клавиш и события keyboard
Мышь и тач: activePointer, события pointer
Мультитач и несколько указателей
Интерактивность объектов: setInteractive
Формы хитзоны: прямоугольник, круг, пиксельный перфект
События объектов: pointerdown, pointerup, pointerover, pointerout
Drag and drop: dragstart, drag, dragend
Gamepad API в Phaser
Зоны ввода и маски ввода
Управление приоритетами ввода
Отключение ввода для объекта и сцены
Текст и шрифты
Text-объект: создание и стилизация
Параметры стиля: шрифт, размер, цвет, тень
Многострочный текст и перенос строк
Обводка и тень текста
Выравнивание и отступы
Динамическое изменение текста
Bitmap Text: создание и применение
Форматы Bitmap-шрифтов: Angelcode, XML
Отличия BitmapText от Text по производительности
DynamicBitmapText и callbacks на символы
Локализация и специальные символы
Графические примитивы
Graphics-объект и его контекст
Рисование прямоугольников, окружностей, линий
Заливка и обводка: fillStyle, lineStyle
Кривые Безье и сложные пути
Маски из Graphics-объектов
Геометрические маски и Bitmap-маски
Генерация текстур из Graphics
Очистка и повторное использование Graphics
Эффекты и шейдеры
Pipeline рендеринга Phaser
PostFX и PreFX: постобработка объектов
Встроенные эффекты: Glow, Shadow, Blur, ColorMatrix
Bloom, Vignette, Scanlines, Pixelate
Написание кастомного WebGL-пайплайна
GLSL-шейдеры в Phaser: uniforms и attributes
Применение шейдера к объекту и к камере
Анимация параметров шейдера
Переключение пайплайнов во время выполнения
Звук и музыка
SoundManager: инициализация и конфигурация
Добавление звука: add и play
Параметры воспроизведения: volume, loop, rate, seek
AudioSprite: несколько звуков в одном файле
Web Audio API vs HTML Audio
Пространственный звук: pan
Очередь воспроизведения и перебивка треков
События звука: complete, looped, stop
Глобальная громкость и mute
Разблокировка аудиоконтекста в браузере
Частицы
ParticleEmitter: создание и настройка
Источник частиц: точка, зона, путь
Параметры частиц: lifespan, speed, scale, alpha, angle
Эмиттеры с несколькими текстурами и фреймами
Режимы излучения: flow и explode
Гравитация и ускорение частиц
Обработчики-модификаторы частиц
Аттракторы и отталкиватели
Коллизии частиц с объектами
Управление производительностью частиц: maxParticles, reserve
Остановка, пауза и перезапуск эмиттера
Tweens и анимация свойств
TweenManager и создание твина
Анимируемые свойства и их типы
Параметры твина: duration, delay, ease, repeat, yoyo
Функции плавности: встроенные и кастомные
Цепочки твинов: TweenChain
Параллельные твины и таймлайны
Твины с несколькими целевыми объектами
Callbacks: onStart, onUpdate, onComplete, onRepeat
Твины для атрибутов, не являющихся числами
Паузить и перематывать твин
Timers: addEvent и повторяющиеся события
Геометрия и математика
Встроенные геометрические примитивы: Rectangle, Circle, Triangle, Ellipse, Line, Point, Polygon
Пересечения и проверки содержания
Случайные точки внутри фигур
Кривые: QuadraticBezier, CubicBezier, Spline, Path
Path: составные кривые и движение по ним
Класс Phaser.Math: утилиты и константы
Векторы: Vector2, Vector3, Vector4
Интерполяция и clamp
Случайные числа: Phaser.Math.RND
Угловые вычисления: angleBetween, wrapAngle
Матрицы трансформации
Работа с сеткой: Grid и Snap
Оптимизация и производительность
Профилирование с помощью Chrome DevTools
Object pooling: группы с maxSize
Отключение невидимых объектов
Culling: автоматическое и ручное
Статические группы объектов
Минимизация перерисовки Canvas
Батчинг спрайтов в WebGL
Использование RenderTexture для статических сцен
Работа с большим количеством тайлов
Управление событиями и подписками
Оптимизация физики: спящие тела, ограничение итераций
Контроль частоты кадров и фиксированный шаг update
Профилирование через Stats.js и Phaser Debug Plugin
Масштабирование и адаптивность
ScaleManager: режимы масштабирования
FIT, ENVELOP, WIDTH_CONTROLS_HEIGHT, HEIGHT_CONTROLS_WIDTH, NONE
Работа с разными соотношениями сторон
Пиксельная графика и режим pixelArt
Адаптация UI под размер экрана
Ориентация устройства и события поворота
Центрирование игры в браузере
Полноэкранный режим: requestFullscreen
Обработка изменения размера окна
Данные и хранение состояния
DataManager: хранение произвольных данных на объекте
События изменения данных
Registry: глобальное хранилище данных
Сохранение состояния в localStorage
Сериализация и десериализация состояния игры
Работа с JSON-конфигами уровней
Сетевые возможности
Phaser и WebSocket: базовый подход
Синхронизация состояния объектов
Interpolation и prediction для сетевых игр
Интеграция с Socket.IO
Загрузка уровней и данных с сервера
Расширение Phaser
Плагины: глобальные и сценарные
Создание собственного плагина
Регистрация фабричных методов
Расширение классов игровых объектов
Пользовательские компоненты через mixin
Кастомные физические интеграции
Использование сторонних плагинов