Phaser предоставляет мощный механизм управления взаимодействием с объектами сцены через события указателя. Основные события, отвечающие за взаимодействие мыши или касания, — это pointerdown, pointerup, pointerover и pointerout. Они позволяют создавать интерактивные элементы, кнопки, игровые объекты с откликом на действия пользователя.
Событие pointerdown срабатывает в момент нажатия на объект. Оно регистрируется для любого объекта сцены, поддерживающего ввод, например, спрайтов, изображений, текстовых объектов.
Пример использования:
let button = this.add.sprite(400, 300, 'button').setInteractive();
button.on('pointerdown', function (pointer) {
console.log('Кнопка нажата');
});
Ключевые особенности:
.setInteractive().Дополнительные параметры:
Можно использовать контекст pointer для получения
координат нажатия:
button.on('pointerdown', function (pointer) {
console.log(`Нажатие в точке x: ${pointer.x}, y: ${pointer.y}`);
});
Событие pointerup срабатывает при отпускании кнопки указателя после нажатия на объект. Оно особенно полезно для имитации “кнопки мыши”, когда действие должно произойти только после полного нажатия и отпускания.
Пример:
button.on('pointerup', function (pointer) {
console.log('Кнопка отпущена');
});
Особенности использования:
Пример: различие между кликом и удержанием:
let holdTime = 0;
button.on('pointerdown', () => { holdTime = Date.now(); });
button.on('pointerup', () => {
if (Date.now() - holdTime > 500) {
console.log('Длительное удержание');
} else {
console.log('Короткий клик');
}
});
Событие pointerover срабатывает, когда указатель входит в область объекта. Оно позволяет создавать визуальные эффекты наведения и реакции на движение курсора.
Пример:
button.on('pointerover', () => {
button.setTint(0x44ff44); // Подсветка при наведении
});
Особенности:
Событие pointerout срабатывает, когда указатель покидает область объекта. Обычно используется вместе с pointerover для восстановления исходного состояния объекта.
Пример:
button.on('pointerout', () => {
button.clearTint(); // Снимаем подсветку
});
Особенности:
Часто эти события используют вместе для создания интерактивного элемента:
let button = this.add.sprite(400, 300, 'button').setInteractive();
button.on('pointerover', () => button.setTint(0x44ff44));
button.on('pointerout', () => button.clearTint());
button.on('pointerdown', () => button.setScale(0.9));
button.on('pointerup', () => {
button.setScale(1);
console.log('Кнопка нажата и отпущена');
});
В этом примере реализован полный интерактивный цикл: подсветка при наведении, эффект нажатия при pointerdown и возврат к исходному состоянию при pointerup.
Phaser поддерживает разные типы указателей: мышь, сенсорный экран и стилусы. В объекте Pointer доступны:
pointer.x и pointer.y — координаты
касания.pointer.leftButtonDown() — проверка состояния кнопки
мыши.pointer.primaryDown — основной указатель активен.Эти свойства позволяют создавать кроссплатформенные интерактивные элементы.
.setInteractive() на каждом
элементе.setInteractive({ shape: shape }).this.input.on('pointerdown', ...)) для глобальной
обработки указателя.События pointerdown, pointerup, pointerover и pointerout создают основу интерактивности в Phaser. Их правильное сочетание позволяет реализовывать кнопки, перетаскивание, hover-эффекты и динамическое управление объектами сцены, обеспечивая гибкость и отзывчивость интерфейса.