Основы обработки событий

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

События можно представить в качестве любых явлений в SWF-файле, которые могут заинтересовать вас как программиста. Например, большинство SWF-файлов поддерживает тот или иной способ взаимодействия с пользователем (от простейших вещей вроде реакции на нажатие кнопки мыши до более сложных операций, таких как принятие и обработка данных, введенных в форму). Любое подобное взаимодействие пользователя с SWF-файлом рассматривается в качестве события. События могут происходить без прямого взаимодействия с пользователем (например, завершение загрузки данных с сервера или активация подключенной камеры).

В ActionScript 3.0 каждое событие представлено объектом события, который является экземпляром класса Event или одного из его подклассов. Объект события не только хранит информацию о том или ином событии, но и содержит методы, облегчающие управление объектом события. Например, когда программа Flash Player или AIR регистрирует нажатие кнопки мыши, она создает объект события (экземпляр класса MouseEvent), который представляет определенное событие щелчка мыши.

После создания объекта события Flash Player или AIR отправляет его. Это значит, что объект события передается объекту, который является целью события. Объект, выступающий в качестве назначения для отправленного объекта события, называется целью события . Например, когда становится активна прикрепленная камера, Flash Player отправляет объект события напрямую в цель события, которая в данном случае является объектом, представляющим камеру. Однако если цель события находится в списке отображения, объект события передается вниз по иерархии списка отображения до тех пор, пока не достигнет цели события. В некоторых случаях объект события затем «всплывает» обратно в иерархии списка отображения по тому же пути. Этот обход иерархии списка отображения называется потоком событий .

«Прослушивать» объекты событий в своем коде можно с помощью прослушивателей событий. Прослушиватели событий — это функции или методы, которые записываются для реакции на определенные события. Чтобы обеспечить ответ программы на события, необходимо добавить прослушиватели событий к цели события либо к любому объекту списка отображения, который принадлежит потоку событий объекта события.

Каждый раз при написании кода прослушивателя событий он следует этой основной структуре (элементы, выделенные полужирным шрифтом — это заместители, которые заполняются, исходя из требований вашего конкретного случая):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

Такой код выполняет две задачи. Во-первых, он определяет функцию. Таким образом указываются действия, которые будут выполняться в ответ на это событие. Во-вторых, он вызывает метод addEventListener() исходного объекта, по существу «подписывая» функцию на указанное событие. Таким образом, когда это событие происходит, выполняются действия функции. При фактическом появлении события цель события проверяет свой список, который состоит из всех функций и методов, зарегистрированных в качестве прослушивателей событий. Затем он по очереди вызывает их, передавая в качестве параметра объект.

Чтобы создать собственный прослушиватель событий, необходимо изменить в этом коде 4 вещи. Сначала необходимо заменить имя функции именем, которое вы хотите использовать (это необходимо сделать дважды там, где в коде присутствует надпись eventResponse ). Во-вторых, необходимо указать соответствующее имя класса объекта события, отправленного событием, прослушивание которого необходимо выполнить ( EventType в данном коде). Кроме того, нужно указать подходящую константу для определенного события ( EVENT_NAME в примере кода). В-третьих, следует вызвать метод addEventListener() , применив его к объекту, который отправит событие ( eventTarget в этом коде). По желанию можно изменить имя переменной, использованной в качестве параметра функции ( eventObject в данном коде).

Важные понятия и термины

Ниже приводится список важных терминов, встречающихся при написании программ обработки событий:

Восходящая маршрутизация
Восходящая маршрутизация имеет место при определенных событиях, причем родительский экранный объект может отвечать на события, отправляемые его дочерним элементом.

Фаза восходящей маршрутизации
Часть потока событий, в которой событие передается вверх к родительским экранным объектам. Фаза восходящей маршрутизации наступает после фаз захвата и цели.

Фаза захвата
Часть потока событий, в которой событие передается вниз от наиболее общего к наиболее определенному объекту цели. Фаза захвата протекает до фаз цели и восходящей маршрутизации.

Поведение по умолчанию
Некоторые события включают поведение, которое обычно сопровождает появление события и называется поведением по умолчанию. Например, когда пользователь набирает текст в текстовом поле, возникает явление события ввода текста. Поведение по умолчанию для этого события состоит в том, чтобы фактически показать символ, который был введен в текстовое поле. Но это поведение можно заменить другим (если по какой-либо причине не требуется показывать вводимый символ).

Отправка
Действие, уведомляющее прослушиватели событий о появлении события.

Событие
То, что происходит с объектом и о чем он может сообщить другим объектам.

Поток событий
Когда с объектом в списке отображения (показанном на экране) происходят события, все объекты, которые содержат этот объект, уведомляются о событии и уведомляют в свою очередь собственные прослушиватели событий. Процесс начинается в рабочей области, продолжается при работе со списком отображения, переходит к фактическому объекту, в котором произошло событие, а затем снова возвращается к рабочей области. Этот процесс называется потоком событий.

Объект Event
Объект, содержащий информацию об определенном вхождении события, которая отправляется всем прослушивателям при отправке события.

Цель события
Объект, который фактически отправляет событие. Например, если пользователь нажимает кнопку внутри объекта Sprite, который вложен в свою очередь в рабочую область, все эти объекты отправляют события, но целью события является то, где фактически произошло событие (в данном случае это нажатая кнопка).

Прослушиватель
Объект или функция, зарегистрировавшая себя с объектом и указывающая, что его необходимо уведомить при появлении определенного события.

Фаза цели
Точка потока событий, в которой событие достигло максимально определенной цели. Фаза цели находится между фазами захвата и восходящей маршрутизации.