Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.11.2010, 06:48
Toxedo вне форума Посмотреть профиль Отправить личное сообщение для Toxedo Найти все сообщения от Toxedo
  № 1  
Ответить с цитированием
Toxedo

Регистрация: Oct 2007
Сообщений: 85
По умолчанию Чистка листенеров

Есть ли какой-нибуть универсальный код чтобы удалял неиспользуемые листенеры?

У меня в мувике много кадров, на 1 ENTER_FRAME и на следующем, если не удалить его перед тем как перейти на какой-нибуть другой, а то вылезет ошибка.

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

Старый 25.11.2010, 07:13
stweet вне форума Посмотреть профиль Отправить личное сообщение для stweet Найти все сообщения от stweet
  № 2  
Ответить с цитированием
stweet
 
Аватар для stweet

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Я бы воспользовался флагами, есть листенер true, нету false. Т.е я так понимаю что надо удалять те которые уже отработали своё? Вот и меняем в конце каждого приёмника по окончанию выполнения задачи значение флага после запускаем таймер и чистим.

Добавлено через 4 минуты
или вообще, всю конструкцию на один ентерФрэйм повесить.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 25.11.2010, 08:42
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 3  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Я думаю на один ентерфрейм, а там уже проверку всунуть, если активен кадр 1 - то такой код, если активен кадр 2 - то такой код.

Старый 25.11.2010, 08:47
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
а я бывоспользовался слабой ссылкой, что уже давно с успехом делаю

Код AS3:
addEventListener(Event.ENTER_FRAME, doSomething, false, 0, true);
Это позволит сборщику мусора, при отсутствии объекта, на который повешан слушатель, удалить сам слушатель.
Ну и естественно стоит воспользоваться предыдущими советами


Последний раз редактировалось goodguy; 25.11.2010 в 09:19.
Старый 25.11.2010, 08:51
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 5  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Не доверил бы я сборщику мусора в данной ситуации)))) Мало ли когда он удалит эту ссылку. То что она свободна, не значит что он сразу ее подчистит))

Старый 25.11.2010, 09:21
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
зато не будет привязки к объекту + как я уже сказал, воспользоваться предыдущими советами. Все в связке будет работать отлично.
Кстати в официальной справке от адоби рекомендуется все энтер фрейм слушатели делать слабой ссылкой, чтобы избежать возможных утечек памяти

Старый 25.11.2010, 11:24
vinch вне форума Посмотреть профиль Отправить личное сообщение для vinch Найти все сообщения от vinch
  № 7  
Ответить с цитированием
vinch

Регистрация: Feb 2010
Сообщений: 95
По поводу проверки - есть метод hasEventListener

Старый 25.11.2010, 11:47
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Слабые ссылки - это костыли, которые не всегда и работают. Я бы сделал сеттеры вот такие:
Код AS3:
public function set enterFrame(value:Boolean):void {
	_enterFrame = value;
	if (value) addEventListener("enterFrame", onEnterFrame);
	else removeEventListener("enterFrame", onEnterFrame);
}
по мне так достаточно удобно. Захотел - вызвал obj.enterFrame = false - и все, больше enterFrame нет у объекта. В такой сеттер можно понапихать несколько отписок/подписок на разные события, если нужно удалять все сразу и скопом.

А вообще, топикстартер, не советую писать в кадрах. И вообще, зачем вы пихаете enterFrame в первый кадр и следующий, если он успеет выполниться только один раз?
__________________
тут я

Старый 25.11.2010, 11:55
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 9  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
Я бы сделал сеттеры вот такие:
Элегантно))) Взял на заметку. А то я недавно решал похожую задачу. В системе несколько окон переключаются, и в каждом окне какая-то подписка на клавиатуру есть, пару окон с вкладками. Если окно закрываю то пофиг отписался и всё, а вот со вкладками некоторое время потратил чтоб придумать как сделать красиво.

С таким сеттером было бы что-то типа: "при смене вкладки переключить на нужный листенер а остальные вырубить", а так у меня получилось что-то корявое, но работающее))

Старый 25.11.2010, 11:59
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 10  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Только сейчас подумал, что нужно дописать:
Код AS3:
public function set enterFrame(value:Boolean):void {
	if (_enterFrame === value) return;
	_enterFrame = value;
 
	if (value) addEventListener("enterFrame", onEnterFrame);
	else removeEventListener("enterFrame", onEnterFrame);
}
Чтобы не было повторной подписки.
__________________
тут я

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.