Actionscript 3.0 事件機制剖析(一)

 

              Actionscript 3.0 事件機制剖析(一)

                                                              ----------------------------Event

 

大部分人使用的Windows操作系統就是一個典型的基於事件的任務調度系統,時間片的輪轉實現多個任務的處理,這是多線程的基礎。在Actionscript 3的介紹中,它是基於DOM3事件模型設計的一套事件處理機制,而且在Actionscript中是沒有多線程的,所以更凸顯了Actionscript中事件的重要性。因此自熱而然,事件機制也就成了Actionscript中非常重要的組成部分了。

在Actionscript 3 中要注意區分Event和Event Flow這兩個概念。Event在我的理解中是指Actionscript 3的整個事件機制,但是Event Flow是Actionscript 3的一個創新,它只會存在與Actionscript 3的全新的現實模型中,並且只與顯示列表有關係(這個剛開始有點不好理解,所以我也分爲Event和Event Flow來說明)。學過別的編程語言,如Java、C#,都知道事件,當然也包裹VC中消息機制,消息映射,因爲它其實也是事件。

 

在W3C Document Object Model Level 3 Event Specification中一個完整的事件機制有4個過程

A、註冊事件偵聽器

   也就是設置一事件由那個對象的那個方法來處理。通俗點也就是告訴編譯器"假如發生了這個事件,由那個來接手處理這件事情"。比如:我們在一個SimpleButton上點擊了鼠標左鍵,而且這個SimpleButton對象註冊了Click事件,哪麼當Click事件發生後,SimpleButton註冊的時間偵聽器就會來處理這個Click事件;再比如這個SimpleButton是在一個MovieClip上,MovieClip對象註冊了Click事件,而SimpleButton則沒註冊,那麼當Click事件發生的時候,就會由MovieClip對象註冊的事件偵聽器來處理這個事件。

B、發送事件

   很簡單,當我們在一個元件或者舞臺上點擊了鼠標左鍵,系統就會發送一個Click事件(至於這個事件是怎麼由系統發送給AVM2的可以暫且不瞭解)。發送的時候,要包括事件的類型,告訴事件偵聽器這是一個鼠標左鍵點擊事件,不是右鍵點擊事件。而且只有當這個事件類型與註冊的事件偵聽器的類型匹配的時候,事件偵聽器纔會響應你。不然她會說"誰知道你是那個野小子,我是打醬油的"。

C、偵聽事件

   也就是事件處理函數。發送事件後,匹配的事件偵聽器偵聽到事件,然後交由這個事件處理函數來處理,這是一個很自然的邏輯。

D、移除偵聽器

   也就是取消偵聽。這個是個重要的步驟,特別是熟悉想C#,Java這些編程語言的人,很容易忽略這個步驟。往往很多時候註冊事件後,不用了也不移除。但是這在Actionscript中是很危險,因爲這些事件偵聽器關係到Actionscript的垃圾回收機制,很容易引起內存泄漏。(弱弱說下,我曾經在這個裏面栽了大跟頭。)

 

 BTW:給出一個自定義事件的例子,URL:http://blog.csdn.net/li_007/archive/2009/02/23/3926558.aspx

 

<script src="http://s.vdoing.com/u/107/54977.js" type="text/javascript"></script>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章