диспетчеризация событий flash AS3 - PullRequest
1 голос
/ 25 мая 2011

Я очень новичок во Flash, и у меня возникли некоторые проблемы:

Итак, у меня есть мой класс Main, который импортирует класс NavMenu.В событии для элемента, по которому щелкают, запускается функция, где я пишу:

dispatchEvent(new Event('my_event'));

В моем классе Main в конструкторе я объявил

addEventListener('my_event', my_event_handler);

, и у меня естьEventHandler, где я хочу удалить некоторых детей со сцены:

private function my_event_handler(event:Event):void
{
     trace("my Event");
}

И ничего не происходит, может кто-нибудь сказать мне, что я делаю неправильно?

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 мая 2011

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

// class Main

var _newClass:NewClass = new NewClass();
_newClass.addEventListener("my_event"), handler);

, а затем отправить событие в NewClass

//class NewClass
this.dispatchEvent(new Event("my_event"));

прямо сейчас, вы, кажется, запускаете событие нормально, но вы добавляете слушателя не к тому объекту (в данном случае, я думаю, что класс Main, который также не выполняет диспетчеризацию).

Обратите внимание - если вы отправите событие в конструкторе NewClass, вы, вероятно, пропустите это событие, так как вы назначите слушателя после того, как событие было запущено.Так что запустите его в другом месте.

  • update -

Как отмечают @redconservatory и @Prototypical, в этом сценарии можно использовать пузырьки.Однако есть некоторые ограничения.

Обычно, если параметр use_capture == false (по умолчанию) в методе eventListener sig, вам действительно нужно нацеливать объект напрямую для получения событий.Чтобы включить фазу пузырьков:

this.addEventListener("my_event", handler, true); //use_capture == true

Родитель дочернего элемента, отправляющего событие, теперь станет подходящей целью события, так как он «пузырится» по иерархии.И в этом случае ответ @ redconservatory правильный.Важным исключением здесь является то, что всплывающее окно доступно только для DisplayObjects .NewClass должен расширить DisplayObject или добавить предка и в список отображения для правильной работы пузырьков.

из liveDocs

Захват и всплытие происходят при перемещении объекта Event от узла к узлу в списке отображения: родительский для захвата и дочерний для родительского дляпузыриться.Этот процесс не имеет ничего общего с иерархией наследования.Только объекты DisplayObject (визуальные объекты, такие как контейнеры и элементы управления) могут иметь фазу захвата и фазу пузырьков в дополнение к фазе нацеливания.

Для полного обсуждения очень важной темы распространения событий -проверить это введение в обработку событий .

2 голосов
/ 25 мая 2011

Попробуйте сделать событие всплывающим до класса Main

dispatchEvent(new Event('my_event', true)); // "true" sets bubbling to true

А в addEventListener сделайте слушатель на сцене Main:

stage.addEventListener('my_event', my_event_handler);
...