В экосистеме Phaser физическая подсистема построена как модульная надстройка над ядром сцены. Архитектура организована таким образом, чтобы разработчик мог выбирать тип физики в зависимости от требований к производительности, точности столкновений и сложности взаимодействий объектов.
В составе фреймворка доступны три основных варианта:
Каждая система реализует собственный набор сущностей, обработчиков столкновений и механизмов обновления, но все они встроены в единую модель жизненного цикла сцены.
Физическая система в Phaser подключается на уровне конфигурации игры:
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
physics: {
default: 'arcade',
arcade: {
gravity: { y: 300 },
debug: true
}
},
scene: [MainScene]
};
После инициализации физический движок становится частью экземпляра сцены:
this.physics
Обновление физики встроено в основной цикл рендеринга:
Scene.update()Таким образом, физический шаг выполняется автоматически на каждом кадре и не требует ручного вызова.
Каждая физическая система содержит объект World — центральный компонент, отвечающий за:
Пример для Arcade Physics:
this.physics.world.setBounds(0, 0, 2000, 2000);
World управляет временным шагом (delta), масштабом
симуляции и стратегией широкофазного поиска столкновений
(broadphase).
Физическое тело — это структура данных, связанная с игровым объектом.
В Phaser тело не существует автономно: оно всегда прикрепляется к
GameObject.
Создание тела:
const player = this.physics.add.sprite(100, 100, 'player');
При этом создаётся:
Sprite),Arcade.Body).velocity — скоростьacceleration — ускорениеgravity — индивидуальная гравитацияbounce — коэффициент упругостиimmovable — неподвижностьallowGravity — включение/отключение гравитацииАрхитектурно тело отделено от рендеринга: физика обновляет координаты, а затем синхронизирует их с отображаемым объектом.
В Arcade Physics существует два базовых типа тел:
Создание:
this.physics.add.sprite(...)
Создание:
this.physics.add.staticSprite(...)
Статические тела участвуют в проверке столкновений, но не обновляются каждый кадр, что снижает нагрузку.
Первичный этап — грубая проверка пересечений по ограничивающим прямоугольникам (AABB). Используется пространственное разбиение (QuadTree), что уменьшает количество проверок.
После предварительного отбора происходит точная проверка пересечения тел.
В Arcade Physics используется прямоугольная модель (AABB), без поворотов и сложных полигонов.
В Matter Physics используется SAT (Separating Axis Theorem), что позволяет работать с:
Phaser разделяет:
Пример коллайдера:
this.physics.add.collider(player, platforms);
Пример overlap:
this.physics.add.overlap(player, coins, collectCoin);
Архитектурно коллайдер регистрируется в World и вызывается автоматически во время фазы разрешения столкновений.
Физические группы упрощают управление множеством тел:
const enemies = this.physics.add.group({
velocityX: 100,
bounceX: 1
});
Группа хранит:
При создании группы движок автоматически создаёт тела для каждого добавленного объекта.
В Arcade Physics применяется простая модель:
velocity += gravity * delta
position += velocity * delta
Гравитация может быть:
В Matter Physics поддерживаются:
applyForce),Таким образом, архитектура Matter ориентирована на более точную физическую модель.
World имеет собственные границы:
this.physics.world.setBoundsCollision(true, true, true, true);
Тело может быть настроено на столкновение с границами:
player.setCollideWorldBounds(true);
Границы мира обрабатываются как специальные статические тела.
Arcade Physics содержит встроенный режим отладки:
arcade: {
debug: true
}
Отображаются:
Это отдельный слой визуализации, не влияющий на расчёты.
| Характеристика | Arcade | Matter |
|---|---|---|
| Модель тел | AABB | Полигональная |
| Повороты | Нет | Да |
| Составные тела | Нет | Да |
| Точность | Средняя | Высокая |
| Производительность | Высокая | Ниже |
Arcade реализован внутри ядра Phaser и оптимизирован для 2D-аркад. Matter подключается как внешний движок и предоставляет полноценную физическую модель.
Физическая система использует переменный временной шаг
(delta), основанный на частоте кадров. Это упрощает
интеграцию, но снижает детерминированность.
В Matter возможно включение фиксированного шага для большей стабильности симуляции.
Arcade Physics применяет:
Matter использует собственную систему broadphase, основанную на сортировке по осям (Sweep and Prune).
Структурно физическая система в Phaser состоит из:
Каждый уровень изолирован:
Такое разделение обеспечивает:
Phaser позволяет:
Физическая подсистема не является жёстко привязанной к рендерингу или анимации, что соответствует принципам компонентной архитектуры.
Физика тесно связана с:
При этом физический расчёт изолирован от логики отображения, что позволяет контролировать производительность и поведение объектов независимо.
Архитектура физических систем Phaser построена по принципу модульности и разделения ответственности. Лёгкий встроенный движок Arcade обеспечивает высокую производительность для большинства 2D-игр, а интеграция Matter предоставляет расширенные возможности точной симуляции. Такая структура позволяет адаптировать физику под конкретные требования проекта, сохраняя единый интерфейс взаимодействия внутри сцены.