Flash 如何在AS3中定义自己的事件?

Flash 如何在AS3中定义自己的事件?,flash,actionscript-3,flash-cs5,Flash,Actionscript 3,Flash Cs5,如何在AS3中定义自己的事件侦听器?我知道这和dispatch事件有关,但我对如何使用它几乎一无所知 我正在编写自定义类。您必须实现IEventDispatcher。像这样: class ExampleDispatcher implements IEventDispatcher { private var dispatcher:EventDispatcher; public function ExampleDispatcher(){ dispatc

如何在AS3中定义自己的事件侦听器?我知道这和dispatch事件有关,但我对如何使用它几乎一无所知


我正在编写自定义类。

您必须实现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);
    }
}

从技术上讲,您可以在不使用工具的情况下定义这些函数,但它只是让它更有条理。

除了Aurel300的答案之外;请记住,每个DisplayObject(Sprite、MovieClip)也是一个事件调度器。您可以通过以下方式发送事件:

dispatchEvent(new Event('my_event'));
还可以通过扩展事件类来创建自定义事件。事件类型(“上面的my_事件”)只是一个字符串,用于区分该特定事件与所有其他事件。例如,当您编写:

dispatchEvent(new Event(Event.COMPLETE));
您只是在使用常量COMPLETE的字符串值。您也可以通过以下方式获得相同的效果:

dispatchEvent(new Event('complete'));

所有侦听该对象的“完整”类型事件的事件侦听器都将捕获该事件。

如果不需要通过事件传递参数,只需使用erkmene所说的字符串即可

听众:

dispatchingObject.addEventListener( "SomeEvent", onEvent );
dispatchingObject.addEventListener( DispatchingClass.SOME_EVENT, onEvent );
调度员:

dispatchEvent( new Event( "SomeEvent" ) );
public static const SOME_EVENT : String = "SomeEvent";

dispatchEvent( new Event( SOME_EVENT ) );
确保分派事件的类直接或在类层次结构中的某个位置扩展EventDispatcher

上面的代码可以工作,但如果分派对象在静态常量变量中保存它分派的事件的名称,则效果最好

听众:

dispatchingObject.addEventListener( "SomeEvent", onEvent );
dispatchingObject.addEventListener( DispatchingClass.SOME_EVENT, onEvent );
调度员:

dispatchEvent( new Event( "SomeEvent" ) );
public static const SOME_EVENT : String = "SomeEvent";

dispatchEvent( new Event( SOME_EVENT ) );

如果可能的话,我尝试扩展EventDispatcher只是因为它的类型更少,但如果不可能,这是一个非常好的解决方案。您应该在这里使用静态常量,而不是文本。编辑以显示如何使用公共静态常量显示来存储事件名称。