Как мне определить свои собственные события в AS3? - PullRequest
0 голосов
/ 10 ноября 2010

Как мне определить моих собственных слушателей событий в AS3? Я знаю, что это связано с событием отправки, но я в значительной степени заблудился, как его использовать.

Я пишу пользовательские классы.

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Если вам не нужно передавать аргументы с событиями, просто сработает строка, как сказал erkmene.

Слушатель:

dispatchingObject.addEventListener( "SomeEvent", onEvent );

Диспетчер:

dispatchEvent( new Event( "SomeEvent" ) );

Убедитесь, что класс, отправляющий событие, расширяет EventDispatcher либо напрямую, либо где-то в иерархии классов.

Приведенный выше код работает, но лучше всего, если диспетчерский объект содержит имена событий, которые он отправляет.в статических константных переменных.

Слушатель:

dispatchingObject.addEventListener( DispatchingClass.SOME_EVENT, onEvent );

Диспетчер:

public static const SOME_EVENT : String = "SomeEvent";

dispatchEvent( new Event( SOME_EVENT ) );
1 голос
/ 10 ноября 2010

Вы должны реализовать IEventDispatcher .Например:

class ExampleDispatcher implements IEventDispatcher {       
    private var dispatcher:EventDispatcher;

    public function ExampleDispatcher(){
        dispatcher = new EventDispatcher(this);
    }

    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void {
        dispatcher.addEventListener(type, listener, useCapture, priority);
    }

    public function dispatchEvent(evt:Event):Boolean {
        return dispatcher.dispatchEvent(evt);
    }

    public function hasEventListener(type:String):Boolean {
        return dispatcher.hasEventListener(type);
    }

    public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void {
        dispatcher.removeEventListener(type, listener, useCapture);
    }

    public function willTrigger(type:String):Boolean {
        return dispatcher.willTrigger(type);
    }
}

ТЕХНИЧЕСКИ вы можете определить эти функции без инструмента , но это просто делает его более организованным.

0 голосов
/ 10 ноября 2010

В дополнение к ответу Aurel300;имейте в виду, что каждый DisplayObject (Sprite, MovieClip) также является диспетчером событий.Вы можете отправить событие, написав что-то вроде:

dispatchEvent(new Event('my_event'));

Вы также можете создать свое собственное событие, расширив класс Event.Тип события («my_event» выше) - это просто строка, чтобы отличить это конкретное событие от всех других событий.Например, когда вы пишете:

dispatchEvent(new Event(Event.COMPLETE));

, вы просто используете строковое значение константы COMPLETE.Вы также можете получить тот же эффект, написав:

dispatchEvent(new Event('complete'));

Все прослушиватели событий, которые прослушивают этот объект для событий «завершенного» типа, поймают это.

...