![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Здравствуйте уважаемые.
Вопрос в следующем. Загружаю DisplayObject друг в друга. Один из них спрайт-кнопка генерящий событие на одном уровне с этой кнопкой среди его братьев есть элемент меню, у которого имеются дочерние элементы "кнопки". на эти кнопки вешаю Таким образом я пытаюсь поймать событие на стадии захвата. Но до кнопок событие не доходит(. Подскажите что я понял не так в Event ?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Каким образом они будут слушать кнопку которая неизвестно где и как добавлена? Контент грузится полностью динамически по настройкам клиента, поэтому найти кнопку не так просто. И потом на сколько я понял фаза захвата работает начиная со stage и рассылается всем отображаемым объектам. Либо я что-то делаю не так, либо я что-то не так понял
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
именно так, нужно чтоб слушали вещателя, ничего само собой никому не рассылается
каким образом подписать это другой вопрос.. как вариант слушать событие в каком-то управляющем объекте, который в свою очередь оповестит эти кнопки |
|
|||||
|
Регистрация: Jun 2007
Сообщений: 374
|
Событие распространяется от родителя к чилдренам. Если кнопки меню не являются родителем кнопки, испускающей событие, Вы никогда не поймаете его.
И вообще какая-то странная структура. Зачем кнопке(!) испускать какое-либо событие, если кнопка по определению испускает события мышки? |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
А чем bubbling не устроил?
|
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Вы должны слушать у объекта находящегося на пути следования сообщения от stage до генератора события (цели). На стадии захвата событие рассылается также как на bubbling только с другой стороны.
В данном случае лучше использовать bubbling а не захват, и вешаться либо на саму цель (кнопку) либо на один из её родителей. |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Цитата:
Этот класс будет у нас слушать событие и информировать когда оно наступает. package { import flash.display.Sprite; import code.events.DeskTopEvents; import flash.events.EventPhase; public class S extends Sprite { private var n:String; public function S(_name:String) { n = _name; addEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop, true); addEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop); } private function hnShowDeskTop(event:DeskTopEvents):void { if (event.eventPhase == EventPhase.CAPTURING_PHASE) { removeEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop, true); } else { removeEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop); } trace ('Поймал ' + n + ' в фазе '+event.eventPhase); } } } иерархия s11 ! ! s21 s22 ! ! ! ! s31 s32 s33 s34 Событе генерится на s21. package { import flash.display.Sprite; import S; import flash.events.Event; import code.events.DeskTopEvents; public class Test extends Sprite { private var s21:S; public function Test() { var s11:S = new S('s11'); addChild(s11); s21 = new S('s21'); var s22:S = new S('s22'); s11.addChild(s21); s11.addChild(s22); var s31:S = new S('s31'); var s32:S = new S('s32'); var s33:S = new S('s33'); var s34:S = new S('s34'); s21.addChild(s31); s21.addChild(s32); s22.addChild(s33); s22.addChild(s34); addEventListener(Event.ENTER_FRAME, hnEnterFrame); } private function hnEnterFrame(event:Event):void { removeEventListener(Event.ENTER_FRAME, hnEnterFrame); trace ('Старт рассылки'); s21.dispatchEvent(new DeskTopEvents(DeskTopEvents.SHOW_DESKTOP, true)); } } } Цитата:
то фазы bubbling вообще не будет, а значит событие будет обрабатываться быстрее. Или я в чем то не прав? ![]() Добавлено через 1 час 5 минут Все равно что-то у меня не получается Вызываю на кнопке Пытаюсь поймать не срабатывает( Добавлено через 1 час 27 минут Попробовал на тестовом примере package { import flash.display.Sprite; import code.events.DeskTopEvents; import flash.events.EventPhase; import flash.events.Event; public class S extends Sprite { private var n:String; public function S(_name:String) { n = _name; addEventListener(Event.ADDED_TO_STAGE, hnAdded); //addEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop, true); //addEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop); } private function hnAdded(event:Event):void { stage.addEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop, true); } private function hnShowDeskTop(event:DeskTopEvents):void { if (event.eventPhase == EventPhase.CAPTURING_PHASE) { removeEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop, true); } else { removeEventListener(DeskTopEvents.SHOW_DESKTOP, hnShowDeskTop); } trace ('Поймал ' + n + ' в фазе ' + event.eventPhase); event.stopPropagation(); } } } В моем случае работать отказывается( Может быть причина в том что объекты контента подгружаются извне?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Цитата:
В начале получили CAPTURE на s11, потом TARGET на s21, потом BUBBLING на s11. Цитата:
Цитата:
И вообще, зачем такая сложная структура как у Вас? Что конкретно вы пытаетесь реализовать? |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Цитата:
наследник от events, думаю код сам за себя скажет package code.events { import flash.events.Event; public class DeskTopEvents extends Event { public static const SHOW_DESKTOP:String = "show_desktop"; public function DeskTopEvents(type:String, bubbles:Boolean=true, cancelable:Boolean=false) { super(type, bubbles, cancelable); } public override function clone():Event { return new DeskTopEvents(type, bubbles, cancelable); } public override function toString():String { return formatToString("DeskTopEvents", "type", "bubbles", "cancelable", "eventPhase"); } } } Цитата:
Добавлено через 44 минуты Ура поймал) Перекомпилил все флэшки сайта по новой и все заработало. Событие ловиться, посыпались ошибки но это уже со свертыванием связано, разберусь. Спасибо всем кто помогал найти истину.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ Последний раз редактировалось SunShadow; 12.12.2008 в 07:47. |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|