Phaser — мощная библиотека для разработки 2D-игр на JavaScript, включающая встроенный физический движок Arcade Physics, который позволяет создавать реалистичное поведение объектов. Одними из ключевых инструментов для управления столкновениями и взаимодействиями являются статические тела и сенсоры.
Статическое тело — это объект, который участвует в коллизиях, но не подвержен физическим силам, таким как гравитация или импульсы. Оно остаётся неподвижным, но при этом способно взаимодействовать с другими динамическими объектами.
В Phaser статическое тело создаётся через
this.physics.add.staticGroup() или
this.physics.add.staticSprite().
// Создание статического спрайта
const ground = this.physics.add.staticSprite(400, 568, 'ground');
// Создание группы статических объектов
const platforms = this.physics.add.staticGroup();
platforms.create(400, 568, 'ground').setScale(2).refreshBody();
platforms.create(600, 400, 'ground');
Ключевые моменты:
setScale — изменяет масштаб
объекта.refreshBody() — обновляет физическое
тело после изменения размеров, обязательно для статических тел.Статические тела часто применяются для платформ, стен, земли или любых объектов окружения.
this.physics.add.collider(player, platforms);
В этом примере player — динамическое тело, которое будет
реагировать на столкновения со статическими платформами.
Сенсор — объект, который обнаруживает пересечения с другими телами, но не вызывает физической реакции. Он полезен для триггеров, зон урона, зон активации событий или областей взаимодействия.
Сенсор в Phaser определяется через свойства физического тела:
const sensor = this.physics.add.sprite(300, 300, 'sensor');
sensor.body.setAllowGravity(false); // не подвержен гравитации
sensor.body.setImmovable(true); // не движется при столкновениях
sensor.body.setSize(50, 50); // задаём размер сенсора
sensor.body.setOffset(0, 0); // смещение тела
sensor.body.checkCollision.none = true; // отключаем физические реакции
Особенности сенсоров:
overlap.overlapthis.physics.add.overlap(player, sensor, () => {
console.log('Игрок вошёл в зону сенсора!');
});
overlap срабатывает при пересечении тел, без применения
силы или импульса.| Свойство | Статическое тело | Сенсор |
|---|---|---|
| Движение | Нет | Нет |
| Влияние на другие тела | Да, вызывает столкновения | Нет, только обнаруживает пересечение |
| Гравитация | Не влияет | Не влияет |
| Основное применение | Платформы, стены, границы | Триггеры, зоны событий, детекторы |
setSize() и setOffset(), чтобы физическое тело
точно совпадало с визуальной графикой.staticGroup или
physics.add.group({immovable: true}) упрощает создание
множества статических объектов и сенсоров.Статические тела и сенсоры позволяют строить сложные механики:
Использование этих инструментов обеспечивает баланс между производительностью, контролем над объектами и интерактивностью игрового мира в Phaser.