Phaser — это мощная библиотека для создания 2D-игр на JavaScript,
которая предоставляет гибкие инструменты для работы с физикой и
коллизиями. Одной из ключевых возможностей является проверка перекрытий
между объектами. В Phaser эта проверка реализуется через метод
overlap, который позволяет определить,
пересекаются ли два объекта или группы объектов, без автоматического
воздействия на их физическое состояние.
overlapМетод overlap используется для
обнаружения столкновений между объектами без применения физических сил.
В отличие от метода collide, который реагирует на
столкновение и может менять скорость, положение или направление
объектов, overlap только сообщает о факте
пересечения.
Сигнатура метода в Phaser 3:
this.physics.add.overlap(object1, object2, callback, processCallback, callbackContext);
Sprite, Group,
PhysicsGroup).true или false,
определяя, нужно ли считать перекрытие.overlap с одиночными объектамиДля проверки перекрытия двух спрайтов можно использовать следующий пример:
let player = this.physics.add.sprite(100, 100, 'player');
let coin = this.physics.add.sprite(150, 100, 'coin');
this.physics.add.overlap(player, coin, collectCoin, null, this);
function collectCoin(player, coin) {
coin.disableBody(true, true);
console.log('Монета собрана!');
}
В этом примере:
player и coin проверяются на перекрытие
каждый кадр.collectCoin.disableBody(true, true) скрывает объект и
отключает его физику, что часто используется для удаления объектов из
игры.overlap с группами объектовЧасто необходимо проверять перекрытия между игроком и целой группой объектов, например, с врагами или предметами:
let coins = this.physics.add.group({
key: 'coin',
repeat: 10,
setXY: { x: 50, y: 50, stepX: 70 }
});
this.physics.add.overlap(player, coins, collectCoin, null, this);
Phaser автоматически проверяет перекрытия каждого объекта группы с игроком и вызывает callback для каждого пересечения. Это удобно для работы с массивами объектов без написания дополнительных циклов.
processCallbackИногда нужно проверять перекрытие только при определённых условиях.
Для этого используется processCallback, который позволяет
отфильтровать пересечения:
this.physics.add.overlap(player, enemies, handleHit, filterHit, this);
function filterHit(player, enemy) {
// Проверяем, активен ли враг
return enemy.active;
}
function handleHit(player, enemy) {
player.setTint(0xff0000);
console.log('Игрок получил урон!');
}
В этом примере:
filterHit возвращает true только для
активных врагов.handleHit вызывается только для объектов, прошедших
фильтр.overlapНет автоматической реакции физики Перекрытие не изменяет скорость или положение объектов, оно лишь сообщает о событии.
Поддержка всех физических тел Phaser Метод
работает с Arcade, Matter и другими
физическими движками Phaser.
Проверка на кадр Проверка перекрытий выполняется каждый кадр, что обеспечивает мгновенную реакцию объектов.
Сложные проверки через группы Можно передавать
как одиночные объекты, так и группы, включая PhysicsGroup
или StaticGroup.
Сочетание с collide Иногда объекты
сначала проверяют столкновение через collide, а отдельные
события — через overlap. Это позволяет разделять физическое
воздействие и игровые события.
processCallback, чтобы исключить ненужные
проверки и снизить нагрузку на производительность.StaticGroup, что ускоряет проверку
перекрытий.Метод overlap является ключевым
инструментом для управления игровыми событиями без воздействия на физику
объектов. Он позволяет создавать интерактивные элементы, обрабатывать
сбор предметов, попадания и зоны активации с высокой гибкостью и
точностью.