Удаление слушателя события – метод AS3 removeEventListener

На этом занятии мы рассмотрим 2 вопроса:

  1. Удаление слушателя события – метод AS3 removeEventListener
  2. Дополнительная информация

В определенных ситуациях нужно удалять слушатель события (event listener), прикрепленный к объекту. Например, в игре бывают случаи, когда нужно чтобы пользователь щелкнул на кнопке только один раз. После этого действия кнопка либо исчезает, либо дизактивируется, т.е. становится недоступной для использования. Или, например, Вы решили на своем flash-сайте в навигационном меню отключить кнопку, ссылающуюся на определенный раздел сайта. Или... словом как видите случаев бывает много, поэтому нужно знать как это сделать.

Итак, удаление слушателя события осуществляется вызовом метода AS3 removeEventListener. Как и в случае с addEventListener принимаются два аргумента:

  • тип события
  • удаляемый обработчик события (event handler)

Например:

myButton.removeEventListener(MouseEvent.CLICK, handleClick);

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

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

Удаление слушателя события – метод AS3 removeEventListener

Создайте обработчик события (см. урок «Создание обработчика события ActionScript»).

Создайте слушатель события (см. урок «Запуск Actionscript 3 события с помощью кнопки»).

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

Введите

removeEventListener(MouseEvent.CLICK, )

После запятой введите имя обработчика события и поставьте точку с запятой после закрывающей круглой скобки.

В итоге Ваш код должен выглядеть примерно вот так:

AS3 removeEventListener

Создайте символ.

кнопка actionscript 3

Его экземпляру на сцене (Stage) присвойте имя, которое Вы использовали при написании слушателя события в начале этого примера (см. уроки «Создание символа (Symbol) во Flash CS5» и «Создание экземпляра (Instance). Присвоение имени экземляру»).

панель свойств flash cs

Нажмите Ctrl + Enter.

Ролик начтет воспроизводиться.

Запустите событие – щелкните на объекте.

Событие запустится.

В панели Output появится сообщение.

панель Output flash cs5

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

Дополнительная информация

Хорошей практикой считается удаление слушателей событий после того как в них отпадает нужда. Они требовательны к ресурсам памяти, поэтому оставлять их активными после того как они выполнили свою миссию непозволительная роскошь! Они просто расходуют ресурсы, которые могли бы пригодится для других более полезных целей. Например, Вы решили, что в многоуровневом меню должны быть активны только два верхних уровня. А раз так, то нужно удалить слушатели событий в кнопках третьего уровня и ниже (если такие кнопки есть).

Эта проблема особенно актуальна во flash-играх. В «стрелялках», например, цели являются экземплярами соответствующего пользовательского класса. К каждой из них прикрепляется слушатель события. После того как цель поражена и удалена со сцены, ее слушатель события все равно остается при ней, растрачивая ресурсы, в которых более не нуждается!