Zed*_*d-K 5 events actionscript-3 addeventlistener dispatch
我正在寻找一种方法来添加一个EventListener,它会在第一次触发后自动删除它,但我无法想办法按照我想要的方式执行此操作.
我找到了这个功能(这里):
public class EventUtil
{
public static function addOnceEventListener(dispatcher:IEventDispatcher,eventType:String,listener:Function):void
{
var f:Function = function(e:Event):void
{
dispatcher.removeEventListener(eventType,f);
listener(e);
}
dispatcher.addEventListener(eventType,f);
}
}
Run Code Online (Sandbox Code Playgroud)
但不必写:
EventUtil.addOnceEventListener( dispatcher, eventType, listener );
Run Code Online (Sandbox Code Playgroud)
我想以通常的方式使用它:
dispatcher.addOnceEventListener( eventType, listener );
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何做到这一点?
任何帮助都会非常感激.
Bef*_*rem 11
我发现最简洁的方法是不使用静态或用噪声搞乱你的代码是定义一个全局函数(在一个名为removeListenerWhenFired.as的文件中),如下所示:
package your.package
{
import flash.events.Event;
import flash.events.IEventDispatcher;
public function removeListenerWhenFired(callback:Function, useCapture:Boolean = false):Function
{
return function (event:Event):void
{
var eventDispatcher:IEventDispatcher = IEventDispatcher(event.target)
eventDispatcher.removeEventListener(event.type, arguments.callee, useCapture)
callback(event)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以听这样的事件:
import your.package.removeListenerWhenFired
// ... class definition
sprite.addEventListener(MouseEvent.CLICKED,
removeListenerWhenFired(
function (event:MouseEvent):void {
... do something
}
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3956 次 |
| 最近记录: |