В библиотеке PixiJS система событий построена вокруг
интерактивных объектов, наследующихся от
PIXI.InteractiveTarget, таких как Sprite,
Container или Graphics. Одним из центральных
инструментов для работы с событиями является метод add,
позволяющий регистрировать обработчики событий.
addМетод add используется для привязки функции-обработчика
к конкретному событию объекта. Сигнатура метода выглядит следующим
образом:
interactiveObject.add(eventType, handler, options);
"pointerdown", "pointerup",
"pointerover", "pointerout",
"click" и т.д.).Пример привязки простого обработчика:
sprite.add('pointerdown', (event) => {
console.log('Sprite был нажат');
});
В данном случае sprite становится интерактивным, если
ранее не был установлен флаг interactive = true. Если это
не сделать, событие не сработает:
sprite.interactive = true;
optionsОбъект options расширяет возможности метода
add. Наиболее значимые поля:
true, обработчик
автоматически удаляется после первого вызова.Пример использования:
sprite.add('pointerdown', handleClick, { priority: 10, once: true });
В этом примере обработчик handleClick сработает первым
среди всех обработчиков события pointerdown на этом объекте
и будет вызван только один раз.
Система приоритетов позволяет управлять порядком вызова нескольких обработчиков одного события на одном объекте. Основные правила:
Пример с несколькими обработчиками:
sprite.add('pointerdown', () => console.log('Обработчик 1'), { priority: 5 });
sprite.add('pointerdown', () => console.log('Обработчик 2'), { priority: 10 });
sprite.add('pointerdown', () => console.log('Обработчик 3'));
Вывод в консоль будет следующим:
Обработчик 2
Обработчик 1
Обработчик 3
Так как Обработчик 2 имеет наивысший приоритет, он
сработает первым, даже если был добавлен позже.
PixiJS наследует концепцию фаз событий из DOM:
При использовании options.capture = true обработчик
сработает на фазе захвата, до того как событие дойдет до дочерних
интерактивных объектов:
container.add('pointerdown', () => console.log('Capture phase'), { capture: true });
child.add('pointerdown', () => console.log('Bubble phase'));
Для корректного управления событиями после добавления полезно знать
метод remove:
sprite.remove('pointerdown', handleClick);
Он удаляет конкретный обработчик. Если использовать
once: true, удаление происходит автоматически после первого
срабатывания.
При работе со сложной интерактивной сценой приоритеты позволяют:
Например, игровой интерфейс может иметь приоритетные кнопки для быстрых действий:
uiButton.add('pointerdown', fastAction, { priority: 100 });
menuButton.add('pointerdown', menuOpen, { priority: 50 });
Так кнопка быстрого действия всегда обрабатывается первой, даже если наложена на другие элементы интерфейса.
add без опций.once и priority для
временных обработчиков с гарантированным порядком срабатывания.capture и bubble при работе
с контейнерами, чтобы избежать непредсказуемого поведения событий.Метод add в PixiJS вместе с параметром
priority обеспечивает гибкую и мощную систему управления
событиями, которая подходит как для простых интерфейсов, так и для
сложных игровых сцен.