Actionscript 3.0 事件機制剖析---事件發送方式(一)

            

         Actionscript 3.0 事件機制剖析

                                                                 事件發送方式(一)

  聲明:歡迎任何人和組織轉載本blog中文章,但必須標記文章原始鏈接和作者信息。

  本文鏈接:http://blog.csdn.net/li_007/archive/2009/03/02/3949445.aspx

  開拓進取的小烏龜------->CSDN點滴點點滴滴Blog

 

  在前面的文章中解釋了Actionscript 3中的事件機制的幾個步驟,也給出了一個自定義的事件的例子。但是在事件類定義後怎麼發送事件呢?這是一個值得大家思考的問題,因爲事件的發送關係到事件的監聽。下面對這句話多說幾句。

 

  前面文章已經說了,在Actionscript 3中要區分Event和Event Flow,Event事件是直接將事件發送到target,中間沒有Event Flow的Capture phases、Target Phases和Bubbling Phases三個階段(在後面的blog中我會講到Event Flow,在下面文章中提到的Event都是普通的Event,不牽涉到Display List,也就不牽涉到Event Flow),所以這樣的話,肯定是誰發送事件,誰就負責監聽事件。

 

   在Actionscript 3中Event Class是負責提供各種事件,比如Error,ADD ,etc.來給EventDispatcher class對象來使用,故要想實現事件的發送,就必須用到EventDispatcher class或者它的子類,而EventDispatcher class是實現了IEventDispather Interface。所以這樣我們可以有三種實現事件發送的方法:繼承EventDispatcher class、複合EventDispatcher 對象以及實現IEventDispatcher Interface。

 

    下面將上一篇blog中的事件發送方式改爲繼承EventDispatcher class的方法:

    1、AlarmEvent.as文件中定義的 Alarm Event class不做任何改變。

    2、增加AlarmDispatcher.as來定義繼承自EventDispatcher class的子類AlarmDispatcher class,代碼實現如下:

 

    3、修改TestEvent class中的OnTimerClock方法如下:

         

 

   當然針對TIMER_ALARM的監聽也應該由AlarmDispatcher Class的實例對象來監聽了,不然就無法收到事件。

 

   對比這種方式和先前沒修改之前的方式有什麼不一樣呢?其實是一樣的,先前本來就是繼承EventDispatcher class來發送事件的。原因是:所有的Actionscript 3的顯示對象都是DisplayObject或者其子類的實例,而DisplayObject又是事件發送類EventDispatcher的子類,因此所有的顯示對象都可以發送事件了。在本例中TestEvent繼承了文檔類Sprite,顯然Sprite也是顯示對象,也當然就繼承了EventDispatcher的方法,也就可以直接this.dispatcherEvent(...)了。

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

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