簡體   English   中英

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

[英]How do I define my own events in AS3?

如何在AS3中定義自己的事件偵聽器? 我知道它與調度事件有關,但是我對如何使用它幾乎迷失了。

我正在編寫自定義類。

您必須實現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);
    }
}

從技術上講,您無需工具即可定義這些功能,但這只是使其變得更有條理。

如果您不需要傳遞帶有事件的參數,只需使用像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 ) );

除了Aurel300的答案; 請記住,每個DisplayObject(Sprite,MovieClip)也是事件分配器。 您可以通過寫下以下內容來發送活動:

dispatchEvent(new Event('my_event'));

您還可以通過擴展Event類來創建自定義事件。 事件類型(上面的“ my_event”)只是一個字符串,用於將特定事件與所有其他事件區分開。 例如,當你寫:

dispatchEvent(new Event(Event.COMPLETE));

你只是使用常量COMPLETE的字符串值。 您也可以通過寫作獲得相同的效果:

dispatchEvent(new Event('complete'));

所有偵聽該對象以獲取“完整”類型事件的事件偵聽器都將捕獲此信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM