天天看點

Flash/Flex學習筆記(34):AS3中的自定義事件

類似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類

測試程式: