處理事件的基本概念

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

您可以將事件想成是 SWF 檔中發生的任何狀況,它們都想要向身為程式設計人員的您傳達一些重要訊息。例如,大多數的 SWF 檔都支援某些使用者互動 (包括像是回應滑鼠按一下的動作這種簡單的互動,或像是接受並處理輸入至表單中的資料這種較為複雜的互動) 功能。因此,任何這類與 SWF 檔進行的使用者互動,都視為一個事件。事件也會在不直接與使用者進行互動的情況下發生,例如從伺服器完成載入資料,或連接的攝影機變成使用中狀態。

在ActionScript 3.0 中,每一個事件都會由事件物件所表示,而事件物件就是 Event 類別或其子類別的實體。事件物件不只會儲存關於特定事件的資訊,也包含了協助處理此事件物件的方法。例如,當 Flash Player 或 AIR 偵測到滑鼠按一下的動作時,便會建立事件物件 (MouseEvent 類別的實體) 來表示該特定的滑鼠按一下事件。

在建立事件物件之後,Flash Player 或 AIR 便會「傳送」該事件物件,這表示會將該事件物件傳遞給做為該事件之目標的物件。其中,做為所傳送事件物件之目的地的物件,便稱為「事件目標」。例如,當連接的攝影機成為使用中狀態,Flash Player 便會直接將事件物件傳送給事件目標 (在此情況下則是代表攝影機的物件)。但是,如果該事件目標位於顯示清單中,則事件物件會向下傳遍顯示清單架構,直到到達該事件目標為止。在某些情況下,該事件物件接著便會沿著相同的路線,在顯示清單架構中向上「反昇」。這種顯示清單架構的移動方式便稱為「事件流程」。

您可以使用事件偵聽程式,「偵聽」程式碼中的事件物件。「事件偵聽程式」是您撰寫用來回應特定事件的函數或方法。若要確保程式會對事件做出回應,您必須將事件偵聽程式加入至事件目標,或加入至任何顯示清單物件 (為事件物件之事件流程的一部分) 中。

不管您在何時撰寫事件偵聽程式程式碼,它都會遵循此基本結構 (呈現粗體的元素代表您將在特定個案中填入的預留位置):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

此程式碼會執行兩個動作:首先會定義函數,以指定要執行的動作來回應事件。接著會呼叫來源物件的 addEventListener() 方法,即由指定的事件「訂閱」函數,當事件發生時,就會執行函數的動作。當事件真的發生時,事件目標就會檢查已註冊為事件偵聽程式的所有函數與方法清單。接著,它會輪流呼叫每個函數與方法,並將事件物件做為參數傳遞過去。

您需要更改此程式碼中的四個項目,以建立自己的事件偵聽程式。首先,您必須將函數名稱變更為自己想要使用的名稱 (您必須在兩個地方找到有「eventResponse」字樣的程式碼並加以變更)。再者,您必須為事件物件指定適當的類別名稱,而該事件物件是由您想要偵聽的事件負責傳送 (就是程式碼中的「EventType」);同時,您必須為特定事件 (清單中的「EVENT_NAME」) 指定適當的常數。第三,您必須在即將傳送事件的物件上呼叫 addEventListener() 方法 (在此程式碼中為「eventTarget」)。或者,您也可以變更當做函數參數使用的變數名稱 (在此程式碼中為「eventObject」)。

重要概念與術語

下列參考清單包括撰寫事件處理常式時會遇到的相關重要術語:

反昇
某些事件會有反昇現象,讓父顯示物件可回應子項傳送的事件。

反昇階段
事件向上傳播到父顯示物件的事件流程一部分。反昇階段發生於捕捉及目標階段之後。

捕捉階段
事件從最平常的目標向下傳播至最特定目標的事件流程一部分。 捕捉階段發生於目標與反昇階段之前。

預設行為
某些事件會包含一種通常會伴隨事件一起發生的行為,稱為預設行為。例如,當使用者在文字欄位中輸入文字,就會引發文字輸入事件。該事件的預設行為就是實際顯示輸入到文字欄位中的字元,但是如果因為某些理由您不希望讓輸入的字元顯示出來的話,也可以覆寫該預設行為。

傳送
通知事件偵聽程式發生了某個事件。

事件
發生在某個物件上的事情,且此物件可告知其它物件關於所發生的事情。

事件流程
當事件發生在顯示清單上的物件時 (顯示在螢幕上的物件),則包含該物件的所有物件都會收到事件通知,並反過來通知所屬的事件偵聽程式有關該事件。此程序將由「舞台」開始,並通過顯示清單直到發生事件的實際物件,最後重新回到「舞台」上。我們將這個程序稱為事件流程。

事件物件
包含特定事件之相關發生資訊的物件;傳送事件時,會將此特定事件傳送給所有偵聽程式。

事件目標
實際傳送事件的物件。例如,如果使用者按一下位於 Sprite (位於「舞台」內) 內的按鈕時,所有的這些物件都會傳送事件,但是事件目標則是實際發生事件的物件,在這裡指的是按下的按鈕。

偵聽程式
將自己向物件註冊的物件或函數,以表示當發生特定事件時,自己應該收到通知。

目標階段
事件達到最特定可能目標時的事件流程點。目標階段發生於捕捉階段和反昇階段之間。