如何在AS3中定义自己的事件侦听器?我知道它与调度事件有关,但我对如何使用它几乎感到失望。
我正在编写自定义类。
答案 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'));
所有侦听该对象以获取“完整”类型事件的事件侦听器都将捕获此信息。