![]() |
Как управлять слушателями?
Подскажите, пожалуйста, наиболее простой и эффективный способ удаления обработчиков событий, созданных в экземплярах классов? Возможно, ли передавать ссылки на созданные слушатели в специально предназначенный для этого класс и при необходимости пройтись по ссылкам и удалить все слушатели? Если да, подскажите, как это реализовать? А если нет, то подскажите альтернативу...
|
Удалить, например, addEventListener(Event.ENTER_FRAME, doSmth); можно с помощью
removeEventListener(Event.ENTER_FRAME, doSmth); |
Я сделал иначе - во всех проектах использую свой Sprite, унаследованный от обычного спрайта, но с переопределенными методами (например, addEventListener).
Мой вариант имеет свой небольшой пул, куда складывает все имеющиеся в нем листенеры, слушает удаление себя, при этом убивает всех своих слушателей, детей и благополучно дохнет сам. По возможности - слежу за удалением сам, но если где-то накосячу - мой класс сам себя подчистит. Кстати, помогает в отладке - при удалении спрайта со сцены сразу можно оттрейсить, где какой слушатель остался висеть. |
Lecosson
Если не жалко, поделись примером или исходником... |
bjd, лови.
Например, вот так: Код AS3:
|
У меня почти то же самое:
Код AS3:
|
Всем спасибо!
|
И никто из ответивших не проверяет, есть ли такой слушатель в массиве при добавлении или нет.
|
по хорошему - надо бы ))
Это будет на совести программиста , чтобы не добавлял слушатель, когда он уже добавлен. Хз... я такие вещи четко держу в голове. Однако, в команде, если не уверен в партнерах, или, наоборот, если хочешь снять с них заботу по слежению за слушателями - может пригодиться. Но и в этом случае по факту вторичного добавления слушателя - нужно генерить ошибку, чтобы потом эти непредусмотренные добавления не вышли боком. Как-то так -) |
По хорошему будет не писать больше подобных классов.
|
| Часовой пояс GMT +4, время: 01:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.