Система событий в PlayCanvas играет важную роль в организации
взаимодействия между объектами и компонентами в приложении. С помощью
этой системы можно удобно отслеживать и обрабатывать различные события,
такие как клики, перемещения, изменения состояний и многое другое. В
PlayCanvas используется объект pc.EventHandler, который
предоставляет функциональность для регистрации, обработки и удаления
событий.
pc.EventHandler — это основной класс для работы с
событиями. Он реализует методы для привязки и отвязывания обработчиков
событий, а также для их активации. Каждый объект, который должен
участвовать в обработке событий, может наследовать этот класс, получая
доступ ко всем его возможностям.
Важной особенностью является то, что pc.EventHandler
использует систему событий с подписками, где каждый обработчик события
выполняется в момент возникновения события. Это позволяет создавать
гибкую и масштабируемую архитектуру, при которой можно обрабатывать
различные события на разных уровнях приложения.
onМетод on используется для регистрации обработчиков
событий на объекте. Этот метод принимает два основных аргумента:
название события и саму функцию-обработчик.
entity.on('click', function() {
console.log('Entity clicked');
});
В примере выше обработчик будет вызываться каждый раз, когда событие
click будет вызвано на объекте entity. Первый
аргумент метода — это строка, указывающая название события, которое
будет обрабатываться. Второй аргумент — это функция, которая будет
выполнена в ответ на это событие.
Важной особенностью метода on является возможность
подписки на несколько обработчиков одного события:
entity.on('click', function() {
console.log('Click handler 1');
});
entity.on('click', function() {
console.log('Click handler 2');
});
В таком случае оба обработчика будут вызваны при наступлении события.
offМетод off используется для отмены регистрации
обработчиков событий. Это полезно, когда необходимо прекратить обработку
события, например, после того как объект уничтожен или событие больше не
нужно.
var handler = function() {
console.log('This handler will be removed');
};
// Регистрация обработчика
entity.on('click', handler);
// Удаление обработчика
entity.off('click', handler);
Если необходимо удалить все обработчики для определённого события,
можно вызвать off без указания обработчика:
entity.off('click');
Это приведет к удалению всех обработчиков, привязанных к событию
click.
fireМетод fire позволяет вручную инициировать событие,
вызывая все зарегистрированные обработчики для этого события. Это
полезно, если нужно выполнить действие в ответ на некоторую логику
программы, а не на действия пользователя.
entity.fire('click');
В примере выше все обработчики, зарегистрированные на событие
click для объекта entity, будут выполнены.
Метод fire также может передавать дополнительные аргументы,
которые будут доступны в обработчике:
entity.on('update', function(data) {
console.log('Update event fired with data:', data);
});
// Вызов события с передачей данных
entity.fire('update', { value: 42 });
Здесь в обработчик будет передан объект { value: 42 },
который можно использовать внутри функции.
Система событий PlayCanvas позволяет также использовать параметры при регистрации событий. Это особенно полезно, если требуется добавлять дополнительные данные или настраивать обработчики в зависимости от контекста.
entity.on('click', function(event, data) {
console.log('Event data:', data);
});
// Вызов события с дополнительными данными
entity.fire('click', { x: 100, y: 200 });
При вызове события можно передавать любые объекты как параметры. Эти данные будут доступны в обработчике и могут быть использованы для более детальной обработки.
Рассмотрим пример использования системы событий в контексте обработки кликов и движений мыши.
var entity = new pc.Entity();
// Обработчик клика
entity.on('click', function() {
console.log('Entity clicked');
});
// Обработчик движения мыши
entity.on('mousemove', function(event) {
console.log('Mouse moved to:', event.x, event.y);
});
// Вызов событий
entity.fire('click');
entity.fire('mousemove', { x: 150, y: 250 });
В этом примере создается объект entity, на который
регистрируются два события: click и mousemove.
При вызове этих событий соответствующие обработчики выводят информацию в
консоль.
Чтобы полностью очистить все обработчики событий, можно использовать
метод off без указания имени события:
entity.off();
Этот вызов удалит все обработчики для всех событий на объекте.
Система событий в PlayCanvas поддерживает более сложные сценарии, например, обработку событий с несколькими аргументами или синхронизацию действий между несколькими объектами. Это позволяет создавать более сложные взаимодействия между компонентами игры или приложения, где каждый объект может реагировать на события, происходящие в других частях системы.
var player = new pc.Entity();
var enemy = new pc.Entity();
// Регистрируем событие на объекте игрока
player.on('damage', function(damageAmount) {
console.log('Player received damage:', damageAmount);
});
// Враг наносит урон игроку
enemy.fire('damage', 10);
В данном примере объект player слушает событие
damage, и при его вызове выводится количество полученного
урона.
Система событий PlayCanvas на основе pc.EventHandler
предоставляет мощные средства для обработки различных событий в
приложении. Методы on, off и fire
позволяют удобно управлять регистрацией, удалением и активацией событий,
что является важным инструментом для создания динамичного взаимодействия
в игровом процессе или других приложениях.