Phaser предоставляет мощный встроенный движок физики Matter.js, позволяющий создавать реалистичные взаимодействия между объектами. Matter.js использует концепцию тел (bodies), которые могут быть простыми (прямоугольники, круги) или составными (многоугольники, цепочки, сложные формы). Управление телами осуществляется через методы, свойства и физические параметры, такие как масса, плотность, трение и упругость.
В Matter.js тело создаётся через функцию
this.matter.add, к которой передаётся тип тела и его
конфигурация.
this.matter.add.rectangle(x, y, width, height, options);
this.matter.add.circle(x, y, radius, options);
this.matter.add.polygon(x, y, sides, radius, options);
Прямоугольник — наиболее часто используемая форма. Основные параметры:
x, y — координаты центра телаwidth, height — размерыoptions — объект с физическими свойствами:
isStatic, friction, restitution,
densityПример создания прямоугольника:
const box = this.matter.add.rectangle(400, 300, 80, 50, {
isStatic: false,
friction: 0.1,
restitution: 0.8
});
Особенности прямоугольников:
Круги создаются с помощью this.matter.add.circle.
Параметры аналогичны прямоугольникам, но тело всегда симметрично и проще
для расчёта столкновений.
const ball = this.matter.add.circle(200, 100, 25, {
restitution: 0.9,
friction: 0.05
});
Ключевые моменты:
mass.Многоугольники создаются с помощью
this.matter.add.polygon. Параметры:
sides — количество сторонradius — радиус описанной окружностиoptions — физические свойстваconst triangle = this.matter.add.polygon(500, 200, 3, 50, {
restitution: 0.7,
friction: 0.2
});
const hexagon = this.matter.add.polygon(600, 400, 6, 40);
Особенности многоугольников:
fromVertices).const complexShape = this.matter.add.fromVertices(300, 300, [
{ x: 0, y: 0 },
{ x: 100, y: 0 },
{ x: 50, y: 50 }
], {
restitution: 0.5
});
fromVertices позволяет импортировать формы из SVG или
ручной разметки.Физические свойства определяют поведение тела:
isStatic — тело неподвижно, не
реагирует на силы.restitution — коэффициент упругости
при столкновениях (0–1).friction — коэффициент трения при
движении по другим телам.frictionAir — сопротивление воздуха,
замедляющее движение.density — плотность, влияет на массу
тела.angle и angularVelocity —
начальный угол и скорость вращения.Пример сложной конфигурации:
const dynamicBox = this.matter.add.rectangle(150, 100, 60, 60, {
isStatic: false,
friction: 0.1,
frictionAir: 0.01,
restitution: 0.8,
density: 0.005,
angle: Math.PI / 4
});
После создания тела можно изменять его состояние и управлять физикой:
dynamicBox.applyForce({ x: 0.01, y: -0.02 });
dynamicBox.setPosition(300, 300);
dynamicBox.setVelocity(5, -2);
dynamicBox.setAngularVelocity(0.1);
dynamicBox.setAngle(Math.PI / 2);
dynamicBox.setRotation(0); // альтернативный способ
dynamicBox.destroy();
Matter.js поддерживает столкновения и события:
collisionstart — начало контактаcollisionactive — продолжающийся контактcollisionend — конец контактаПример отслеживания столкновений:
this.matter.world.on('collisionstart', (event) => {
event.pairs.forEach(pair => {
const { bodyA, bodyB } = pair;
console.log('Столкновение:', bodyA.label, bodyB.label);
});
});
Для сложных объектов можно объединять несколько форм в одно тело
через Matter.Composite или Matter.Body.create.
Пример создания составного объекта:
const compoundBody = this.matter.body.create({
parts: [
this.matter.bodies.rectangle(0, 0, 50, 50),
this.matter.bodies.circle(0, -25, 25)
],
restitution: 0.6
});
this.matter.world.add(compoundBody);
Особенности:
Matter.js в Phaser обеспечивает полный контроль над телами: от простых прямоугольников до сложных многоугольников и составных форм. Правильная настройка физических параметров и работа с событиями позволяет создавать динамичные и реалистичные сцены.