類似C#中自定義事件需要一個自定義的EventArgs子類一樣,AS3也需要開發者自定義一個Event類的子類,這裡我們假設一種場景:設計一個Person(人物)類,裡面有Age(年齡),Name(姓名),我們希望每當Person類的執行個體Age(年紀)發生變化時,能觸發一些自定義事件,進而調用某些特定的處理方法。
1.先設計Event類的子類AgeChangeEvent
這裡我們定義了二類事件:年齡變化(AGE_CHANGE)、年齡超出範圍(AGE_OUT_OF_RANGE)
2.再來設計Person類
注意這裡的dispatchEvent處理部分,先定義一個事件(參數)對象,然後派發事件.(類似C#中的委托/事件機制,Person類并不知道最終Peson的使用者将如何處理這二個事件,但隻要遵守約定就能正确調用開發者執行的處理方法)
3.測試剛才的事件,建立一個Flash File(ActionScript3.0)的fla檔案,在第一幀寫入以下測試代碼 :
建議大家先猜猜結果,動手實踐一下,再看下面的輸出結果:
“菩提樹下的楊過”童鞋一晃今年都已經“30”歲了,真是歲月不饒人啊.
注意:這家夥年齡改了!
注意:這老家夥居然說自己年齡超過120歲了!
有時候,我們還希望AgeChangeEvent參數還能附帶一些額外資訊,這個也難不倒AS,把AgeChangeEvent改造一下(注意新增部分):
Person類裡Age的setter部分也要改一下:
測試fla中的代碼稍加改動:
新的輸出結果:
注意:這家夥年齡從31改成32了!
注意:這家夥年齡從32改成150了!
注意:這家夥年齡從150改成149了!
注意:這老家夥居然說自己年齡超過120歲,現在已經有149了!
後記:自定義事件可以廣泛應用于很多場景,比如我們可以自己做一個控制滑塊MovieClip,裡面定義一個ValueChange事件,其它需要的地方(比如音量大小控制,對象Alpha值控制,對象大小控制...),隻要定義自己的處理函數,然後注冊到該事件即可
最後做為對比和複習,貼出C#版的自定義事件:
AgeChangeEventArgs類
Person類
測試程式: