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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.08.2010, 21:10
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
По умолчанию Разница между willTrigger и hasEventListener

Цитата:
Разница между методами hasEventListener() и willTrigger() заключается в том, что hasEventListener() просматривает только тот объект, которому принадлежит, а willTrigger() просматривает весь поток событий для события, указанного в параметре type.
Делаю тест - willTrigger ловит события родителя и своё в иерархии дисплай листа, hasEventListener ловит только своё.
Вопроса бы не возникло, если бы willTrigger объявлялось в DisplayObject. Вне DisplayObject`ов я не могу найти разницы. Это идиотизм или я недостаточно хорошо ищу?

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

Регистрация: May 2009
Сообщений: 220
судя по всему адобовцы исходили из принципа тематического единства, а не видимой необходимости того или иного свойств в классе. На эту мысль наводят некоторы факты:

- наиболее очевидный - это то, что в некоторые классы заложена функциональность, которой там по идее не должно быть. Например, TextField и SimpleButton контейнерами не являются, однако, могут иметь детей, и даже диспатчаться события их добавления. Т.е. внутренние механизмы деторождения заложены в вышестоящем классе и, скорей всего - это DisplayObject.
- далее, метод dispatchEvent оверрайден минимум один раз в пути до Sprite. Это доказывают нехитрые тесты. Это значит, что проблем с вызовом super методов нет ни разу. И можно было спокойно определить willTrigger в DisplayObject, а внутри пробегаться по парентам с super.hasEventListener

Старый 05.08.2010, 20:04
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
- наиболее очевидный - это то, что в некоторые классы заложена функциональность, которой там по идее не должно быть. Например, TextField и SimpleButton контейнерами не являются, однако, могут иметь детей, и даже диспатчаться события их добавления. Т.е. внутренние механизмы деторождения заложены в вышестоящем классе и, скорей всего - это DisplayObject.
Нет, просто в хелпе в цепочке наследования пропущен DisplayObjectContainer.
Цитата:
- далее, метод dispatchEvent оверрайден минимум один раз в пути до Sprite. Это доказывают нехитрые тесты.
Что то в голову не приходят идеи как это можно проверить. Поделитесь идеей, пожалуйста.
Цитата:
И можно было спокойно определить willTrigger в DisplayObject, а внутри пробегаться по парентам с super.hasEventListener
Так то понятно, но зачем переопределять то, что раньше по идее не должно было быть предопределенно? Похоже, это действительно идиотизм.

Старый 05.08.2010, 20:25
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вне дисплей обжектов нет разницы.
__________________
Hell is the possibility of sanity

Старый 05.08.2010, 21:21
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Понятно, идиотизм. Спасибо.

Старый 05.08.2010, 21:30
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
просто подразумевается что вне дисплэйобжектов бабблинга не существует ( по сути так и есть)
если хочешь реализлвать свою систему всплытия, например, для Model`ей переопредели willTrigger под себя.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 05.08.2010 в 21:33.
Старый 05.08.2010, 21:49
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Не не, про бабблинг у Event`ов понятно - в конструкторе объявить дополнительный аргумент это вполне удобно.
Меня интересовал момент, почему эта вещь по идее должна быть объявлена в DisplayObject`е, но почему то объявлена в EventDispatcher - значит вполне возможно я не понимаю чего то в механике, ради чего и была поднята эта тема.

Старый 05.08.2010, 22:18
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я думаю, что реализация такая, какая она есть потому, что ее не придумывали специально для флеша, а скопировали DOM3 события не особенно задумываясь о логике.
__________________
Hell is the possibility of sanity

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

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Нет, просто в хелпе в цепочке наследования пропущен DisplayObjectContainer.
наследование в AS3 предполагает получение наследником ВСЕХ свойств. Это значит, что будь SimpleButton наследником DisplayObjectContainer, то как минимум можно было бы вызвать addChild, пусть даже он был переопределен на выброс ошибки. Однако, этого сделать нельзя.

Хорошо, допустим в плеере нативные классы сделаны на си с возможностью наследования реализации (я в си не знаток, но допустим). И копируются только внутренние механизмы DisplayObjectContainer. Тогда на кой черт в свободном доступе (хоть и переопределенными) у Stage оставили весь этот балласт из неиспользуемых свойств? Исключительно потому что "официально" Stage наследуется от DisplayObjectContainer? Типа "спалились"? Это глупо.

И потом, подобные финты с сокрытием реальных родителей (в цепочке наследования) чреваты костылями. Например, в describeType писать:
Код AS3:
if (value is SimpleButton || value is TextField) /*скрываем DisplayObjectContainer*/;
или заводить отдельное свойство/объект, которые содержит то, что нужно показать программеру, в противовес реальному.
Так что ли ?


Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Что то в голову не приходят идеи как это можно проверить. Поделитесь идеей, пожалуйста.
потести скорость диспатча без баблинга: EventDispatcher, Sprite и наследника EventDispatcher с переопределенным dispatchEvent. Например так:
Код AS3:
override public function dispatchEvent(event:Event):Boolean {
	var b:Boolean = true;
	if (b) return super.dispatchEvent(event);
 
	return false;
}

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Код AS3:
var tf:TextField=new TextField();
trace(tf is DisplayObjectContainer);
 
var btn:SimpleButton=new SimpleButton();
trace(btn is DisplayObjectContainer);
Вывод:
Цитата:
false
false
__________________
ranga

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

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

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


 


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


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