Phaser предоставляет мощный и гибкий механизм работы с указателями
через объект input и активный указатель
activePointer. Этот инструмент объединяет
работу мыши, сенсорного экрана и стилуса, позволяя обрабатывать события
взаимодействия пользователя с игровым экраном универсальным образом.
activePointer и его
свойстваОбъект this.input.activePointer всегда
указывает на текущий активный указатель. Для большинства приложений это
основной способ получить информацию о позиции и состоянии курсора или
касания. Основные свойства:
x и y – текущие
координаты указателя на сцене. Обновляются при движении.worldX и worldY –
координаты указателя с учётом камеры, полезны для взаимодействия с
игровым миром.isDown – булево значение,
показывающее, нажата ли кнопка мыши или активен ли касание.justDown и justUp –
флаги, указывающие на момент начала или окончания нажатия.leftButtonDown() /
rightButtonDown() – методы для проверки состояния
конкретных кнопок мыши.Пример использования для отслеживания клика:
if (this.input.activePointer.justDown) {
console.log(`Клик по позиции: ${this.input.activePointer.x}, ${this.input.activePointer.y}`);
}
Phaser поддерживает несколько типов событий для указателей, которые позволяют реагировать на различные действия пользователя.
pointerdown – вызывается при нажатии
кнопки мыши или касании экрана.pointerup – вызывается при отпускании
кнопки или окончания касания.pointermove – вызывается при
перемещении указателя.pointerover и
pointerout – срабатывают, когда указатель
входит или выходит из объекта.pointerenter /
pointerleave – аналогично, но работают только для
интерактивных объектов.Пример добавления обработчика на сцену:
this.input.on('pointerdown', function(pointer) {
console.log(`Нажатие на сцену в точке (${pointer.x}, ${pointer.y})`);
});
Любой объект Phaser, поддерживающий интерактивность (например,
спрайт), можно сделать интерактивным с помощью
setInteractive(). После этого объект
сможет реагировать на события указателя:
let sprite = this.add.sprite(400, 300, 'button').setInteractive();
sprite.on('pointerover', () => {
sprite.setTint(0x44ff44);
});
sprite.on('pointerout', () => {
sprite.clearTint();
});
sprite.on('pointerdown', () => {
console.log('Нажатие на кнопку');
});
Эта модель позволяет легко реализовывать кнопки, сенсорные зоны и игровые элементы, реагирующие на касания или клики.
Phaser поддерживает одновременные касания и клики, что особенно важно
для мобильных устройств. Каждый указатель представлен объектом
Pointer, и их можно получить через массив
this.input.pointers. Например:
this.input.pointers.forEach(pointer => {
if (pointer.isDown) {
console.log(`Активный указатель: ${pointer.id} в позиции (${pointer.x}, ${pointer.y})`);
}
});
Каждый Pointer имеет уникальный
id, что позволяет отслеживать несколько
одновременных касаний и различать их.
Флаги justDown и
justUp позволяют регистрировать события в
момент их возникновения, предотвращая повторное срабатывание при
удержании кнопки:
if (this.input.activePointer.justUp) {
console.log('Кнопка отпущена');
}
Кроме того, объект Pointer хранит время
последнего нажатия в downTime и время
последнего отпускания в upTime, что удобно
для реализации двойных кликов, долгих нажатий или жестов.
sprite.setInteractive();
this.input.setDraggable(sprite);
this.input.on('drag', (pointer, obj, dragX, dragY) => {
obj.x = dragX;
obj.y = dragY;
});
let startX, startY;
this.input.on('pointerdown', pointer => {
startX = pointer.x;
startY = pointer.y;
});
this.input.on('pointerup', pointer => {
let deltaX = pointer.x - startX;
let deltaY = pointer.y - startY;
if (Math.abs(deltaX) > 50 || Math.abs(deltaY) > 50) {
console.log('Свайп зарегистрирован');
}
});
let worldX = this.input.activePointer.worldX;
let worldY = this.input.activePointer.worldY;
console.log(`Мировая позиция указателя: ${worldX}, ${worldY}`);
Phaser позволяет изменять настройки указателя для разных устройств:
this.input.mouse.enabled – включение
или отключение мыши.this.input.touch.enabled – включение
или отключение тач-событий.this.input.topOnly – если
true, активируются события только для верхнего
интерактивного объекта.Эти параметры позволяют создавать гибкие интерфейсы, которые одинаково хорошо работают на ПК и мобильных устройствах.
Объект activePointer, массив
pointers и система событий
pointer формируют ядро взаимодействия с
пользователем в Phaser. Они обеспечивают единый интерфейс для мыши,
тач-экранов и стилусов, поддерживают множественные указатели, события
нажатий и отпусканий, а также сложные жесты, включая перетаскивания и
свайпы. Использование этих инструментов позволяет создавать
интерактивные элементы и динамичные пользовательские интерфейсы с
минимальными усилиями, обеспечивая точное и отзывчивое управление в
играх и приложениях.