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

时间:2010-11-09 21:39:18

标签: flash actionscript-3 flash-cs5

如何在AS3中定义自己的事件侦听器?我知道它与调度事件有关,但我对如何使用它几乎感到失望。

我正在编写自定义类。

3 个答案:

答案 0 :(得分:1)

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

技术上你可以在没有工具的情况下定义这些功能,但它只是使它更有条理。

答案 1 :(得分:1)

如果您不需要传递带有事件的参数,只需使用像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 ) );

答案 2 :(得分:0)

除了Aurel300的答案;请记住,每个DisplayObject(Sprite,MovieClip)也是一个事件调度程序。您可以通过写下以下内容来发送活动:

dispatchEvent(new Event('my_event'));

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

dispatchEvent(new Event(Event.COMPLETE));

您只是使用常量COMPLETE的字符串值。您也可以通过写作来获得相同的效果:

dispatchEvent(new Event('complete'));

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