Phaser предоставляет гибкие инструменты для управления пользовательским вводом, включая мышь, касания и клавиатуру. Иногда требуется временно или полностью отключить обработку ввода для конкретного объекта или всей сцены. Это может быть необходимо при паузе игры, при отображении интерфейса или во время анимаций, когда взаимодействие с объектами должно быть заблокировано.
Каждый интерактивный объект в Phaser может обрабатывать события ввода
через методы setInteractive() и слушатели событий, такие
как pointerdown, pointerover и другие. Чтобы
отключить ввод для объекта:
sprite.disableInteractive();
disableInteractive() — снимает
интерактивность с объекта, прекращая обработку всех событий
указателя.Для повторного включения интерактивности используется:
sprite.setInteractive();
Важно понимать, что disableInteractive() не отключает
физическое взаимодействие объекта с коллизиями, оно влияет исключительно
на ввод пользователя.
Для группы объектов или контейнера удобно использовать цикл:
group.getChildren().forEach(child => {
child.disableInteractive();
});
Если объекты добавлены в контейнер Container, отключение
интерактивности контейнера не влияет автоматически на его дочерние
элементы. Необходимо применять disableInteractive() к
каждому объекту отдельно.
Phaser хранит менеджер ввода сцены в this.input.
Отключение всех событий ввода можно выполнить через:
this.input.enabled = false;
enabled в false, блокируются
все события мыши и касаний для текущей сцены.Для восстановления работы:
this.input.enabled = true;
Phaser позволяет контролировать ввод по конкретным устройствам. Например, отключение только мыши или касания:
this.input.mouse.enabled = false;
this.input.touch.enabled = false;
this.input.mouse.enabled — блокирует события мыши.this.input.touch.enabled — блокирует касания на
сенсорных устройствах.1. Блокировка объекта на время анимации:
sprite.disableInteractive();
this.tweens.add({
targets: sprite,
x: 400,
duration: 1000,
onComplete: () => {
sprite.setInteractive();
}
});
2. Временная пауза всей сцены с блокировкой ввода:
this.input.enabled = false;
this.time.delayedCall(2000, () => {
this.input.enabled = true;
});
3. Игнорирование касаний на мобильных устройствах:
this.input.touch.enabled = false;
on, перестают вызываться при
disableInteractive().this.input.enabled.disableInteractive() для избирательной
блокировки отдельных объектов.this.input.enabled = false.function setObjectsInteractive(objects, state) {
objects.forEach(obj => {
state ? obj.setInteractive() : obj.disableInteractive();
});
}
Такой подход упрощает управление большим количеством объектов и позволяет легко реализовать динамическое включение/отключение ввода в игровых сценах.