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

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

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

Регистрация: Mar 2013
Сообщений: 290
По умолчанию Определить наличие слушателя.

Всем привет, и с Наступающим.

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

Подозреваю, что это невозможно. Но что делать, если возникла такая задача?
Например, архитектура такова, что нужно удалить слушатель, но не факт, что этого уже не произошло.
Проще всего наверное оставить его для GC. Ну или менять архитектуру, упрощать, прояснять.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вы можете определить факт наличия слушателя для определенного типа событий.
Цитата:
И как следствие, получить список всех слушателей, привязанных к объекту?
Список получить не получится.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Можно смело удалять слушатель. Если он уже удален, то ничего не произойдет. А проверить список слушателей стандартными средствами невозможно. Если нужно, то можно написать обертку над Sprite, к примеру, и там регистрировать наличие всех слушателей. Но я бы так делать не стал.

Старый 31.12.2013, 12:29
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Непонятно, зачем оно надо.
Цитата:
Например, архитектура такова, что нужно удалить слушатель, но не факт, что этого уже не произошло.
И? Исключения то не будет, это не removeChild().
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 31.12.2013 в 15:53.
Старый 31.12.2013, 12:33
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 5  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Цитата:
Список получить не получится.
В общем понятно, спасибо. Значит только флажок наличия можно получить.

Цитата:
можно написать обертку над Sprite
Не совсем понимаю что значит "обертка", это интерфейсы?

Цитата:
Но я бы так делать не стал.
А почему кстати? Видимо, нет особого смысла.

Цитата:
И? Исключения то не будет, это не removeChildren().
Мне кажется, у меня были проблемы с удалением несуществующего слушателя.
Но точно не уверен, много экспериментировал, может быть что-то не так проинтерпретировал.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Не совсем понимаю что значит "обертка", это интерфейсы?
Нет, это переопределение (override) методов addEventListener и removeEventListener в Вашем классе-наследнике спрайта. Заводите справочник например (Dictionary) и записываете в него всех желающих добавиться в слушатели прямо в переопределенном addEventListener. Затем выполняете super.addEventListener(), то есть "обычный"))) Так же с удалением.
Но, еще раз, в этом нет никакого смысла. Время от времени такой вопрос задают, но почти всегда это связано с неправильным пониманием "очищения объекта перед удалением из памяти". Объект должен отписываться от тех, кого слушает, а не отписывать тех, кто слушает его.
__________________
Reality.getBounds(this);

Старый 31.12.2013, 13:53
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Не совсем понимаю что значит "обертка", это интерфейсы?
Если я правильно понимаю, то приблизительно так, как в коде, который я как то раз подсмотрел -
Код AS3:
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 
{
	_listeners.push( { type:type, listener:listener } );
	super.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
 
public function destroyEventListener():void
{
	var length:int = _listeners.length;
	for (var i:int = 0; i < length; i++) 
	{
		var type:String = _listeners[i].type;
		var listener:Function = _listeners[i].listener;
		this.removeEventListener(type, listener);
	}
	_listeners.length = 0;
}
Всех с наступающим!

Старый 31.12.2013, 14:12
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
да, все верно

Старый 31.12.2013, 23:52
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 9  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Wolsh,
Цитата:
Объект должен отписываться от тех, кого слушает, а не отписывать тех, кто слушает его.
О как, не знал про этот принцип, поapply'ю его, но таки уже не сегодня ^_^


Akopalipsis,
Название: beer.gif
Просмотров: 208

Размер: 4.6 Кб

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

Теги
check , listener , object , Sprite
Опции темы
Опции просмотра

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

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


 


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


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