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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.02.2014, 23:21
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию Как передаются события по иерархической цепочке

Продолжая тему и забыв о том, что я писал, начну заново. Есть Main, в нем лежит спрайт container, в котором лежит спрайт button. На клик подписан контейнер. И вот вызывается клик и первым об этом узнает сцена.
Она смотрит свой список чилдов и видит в нем Main. Сцена уведомляет его, а тот в свою очередь смотрит свой список чилдов и найдя контейнер, уведомляет его. И в контейнере срабатывает слушатель...
И сразу много вопросов - уведомляет, это передает объект типа MouseEvent?
После срабатывания слушателя в контейнере, событие передается дальше и если его не прервать, то о нем и кнопка узнает?
Если это правильно, то откуда в слушателе берётся currentTarget, как он вообще туда попадает?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
currentTarget это объект, которому добавили слушатель.
target это объект, получивший событие (в случа ДО от стейджа через своих родителей), и отправивший его всплывать обратно. То есть "конечный" получатель события, глубже которого уже нет.

Добавлено через 1 минуту
Цитата:
откуда в слушателе берётся currentTarget, как он вообще туда попадает?
Как свойство оъекта класса Event, вестимо.

Добавлено через 17 минут
В Вашем случае контейнер будет currentTarget ("На клик подписан контейнер").
Кнопка будет target, но только если ее собственные внутренности не реагируют на мышь.
Клик сначала "тонет", стейдж - мейн - контейнер - буттон. Дальше тонуть некуда, нет объектов с реакцией на мышь. Поэтому буттон называется "получатель" события, таргет. Буттон записывает себя в поле target копии события и отправляет его наверх. От него событие начинает "всплывать". И в этой фазе (по-умолчанию) оно и ловится. В Вашем случае всплывает до контейнера, и на это событие в фазе всплытия у контейнера зарегистрирован слушатель. Он стало быть срабатывает, контейнер (его внутренний EventDispatcher) вызывает функцию-обработчик и передает ей копию объекта MouseEvent, без ложной скромности записав в currentTarget ссылку на себя, любимого. В мейн и стейдж оно тоже всплывет, естественно. Если не прекратить пропаганду.
__________________
Reality.getBounds(this);

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

Регистрация: Mar 2013
Сообщений: 1,864
Wolsh Спасибо! Сейчас читаю сопоставляю Ваши слова с хелпом и понимаю, что это уже знаю, но просто подзабыл. И ещё выявил ошибку в знаниях, я думал что третий параметр, это событие всплытия, т.е. когда f получать события в фазе всплытия. А оказывается всё наоборот.
Но хочу ещё уточнить - в контейнере лежат пять кнопок, при клике по контейнеру я событие проходит по всем пяти кнопкам? Но если да, то почему target та, которая была под курсором?)

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

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

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

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
В каком смысле "событие проходит по всем пяти кнопкам"? Что за балаган?
Т.е. в событии клика по контейнеру с пятью кнопками участвуют - Stage, Main, container, button по которой кликнули. Остальные четыре кнопки не получают уведомления на стадии захвата или всплытия?
Или если у Main будет много детей, их это событие обойдет?
Цитата:
Они не многоадресные, они иерархичны, и у них есть такая маленькая штучка как координаты пойнтера.
А как по поинту находится нужная кнопка, hitTestPoint? И если да, то в контейнере, в котором будет тысяча шариков, которые должны лопаться при клике по ним, как будет лучше сделать, подписать контейнер, что заставит его прогонять в цикле все тысячу шариков или регистрировать тысячу приёмников и избавив флеш от hitTestPoint? Или я опять что-то путаю?)

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вам когда-нибудь приходило в голову, что, возможно, flashplayer и его дисплейные объекты, как и реализация событий, написаны не совсем на ActionScript 3.0? Что если Вы, сидя в машине, смотрите на стрелку и шкалу, чтобы узнать остаток топлива, это вовсе не значит, что внутри машины спряталась очередь из 15 корейских карликов, каждый из которых смотрит на свою стрелку и шкалу и поворачивает стрелку для другого, чтобы передать Вам свежие данные? Не надо думать, что getObjectsUnderPoint(), например, содержит в себе написанный на AS3 цикл перебора всех детей с рекурсией и применением к каждому AS3 же метода hitTestPoint(), а рендер флэшплеера делает снимок стейджа в битмапдату методом draw() и результат отдает видеокарте.. предварительно собирая ByteArray с помощью getPixel32().. Что за наивность? Задумайтесь: флэшплееровский рендер способен за миллиардную долю секунды вычислить, каким будет окончательный цвет конкретного пикселя для вывода на экран с учетом тысячи наложений объектов с разным цветом, альфой, блендингом и трансформациями — поворотами и масштабированием. С помощью классов AS3 вам вряд ли удастся измерить, с какой скоростью он определяет цепочку объектов под указателем мыши.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 25.02.2014 в 09:23.
Старый 25.02.2014, 14:25
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 7  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Приходило, но для уверенности необходимо было уточнить. Спасибо! Вроде разобрался окончательно.
Но иногда мне кажется, что там карлики сидят, правда я думал что китайские

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Приходило, но для уверенности необходимо было уточнить. Спасибо! Вроде разобрался окончательно.
То, что флеш плеер написан на С++, сомнений не вызывает. А вот о том, как там что конкретно работает здесь никто точно не скажет. Исходники ФП закрыты

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
и закопаны

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

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

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


 


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


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