ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始
ActionScript 3.0中的事件模型和Java的AWT事件模型非常的相似,很久前我也寫過一篇與Java的事件模型相關的文章《談愛情故事,談觀察者模式》,有興趣的朋友可以去看看。在ActionScript 3.0中提供了很多種事件類型,用得最多得則是鼠標和鍵盤相關的事件,本文主要介紹鼠標的事件和ActionScript 3.0中的事件模型。
一、從點擊按扭認識事件
大家都知道,在開發ASP.NET應用的時候,我們要執行某一操作,可以將代碼寫在按扭的click事件下,在運行程序的時候通過點擊按扭便會觸發事件執行下面的程序代碼。在ActionScript 中同樣如此,我們也可以設置按扭的click事件,將點擊按扭后要執行的程序代碼下在事件函數下面。如在本系列第一篇文章中的“Hello World”示例:
1?????<mx:Button?x="24"?y="35"?label="點?我"?id="btnClick"?2?????????height="34"?width="63"?fontSize="14"?
3?????????click="OnClick()"/>
?????如上代碼片段,設置了按扭的click事件的執行函數為OnClick()方法,下面為OnClick的定義: 1?????internal?function?OnClick():void?{
2?????????txt.text="Hello?World!";
3?????}
?????眾所周知,在.NET里做開發,我們出了直接通過執行按扭的Button_OnClick事件,也可以不觸發OnClick屬性,通過委托的方式("+=")給按扭附加一個事件處理函數.在ActionScript 3.0中同樣可以怎么來處理,只是實現上有所不同,它同Java一樣,是通過事件監聽來完成的,也就是直接給按扭添加一個事件監聽函數,如下代碼塊:
2?btnClick.addEventListener(MouseEvent.CLICK,OnClick);
3?
4?------------------------------------------------------
5?private?function?OnClick(evt:MouseEvent):void?{
6?????result.text="你點了按扭";
7?}
?????
?????由上面代碼塊可以看出,是通過addEventListener()方法給按鈕添加了一個事件監聽函數,那么相反的則是注銷監聽,使用removeEventListener()方法來完成。
?????按鈕的鼠標事件有很多中,上面演示了單擊事件MouseEvent.CLICK,出了它還有下面幾種,如圖所示:
???????????????
?????這里需要注意的一點,給按鈕添加事件監聽函數的時候,這個函數的定義需要一個鼠標事件類型的參數,見上面單擊事件(Click)所添加的事件監聽方法(OnClick)的定義。
?
二、ActionScript 3.0的事件體系
?????ActionScript 3.0作為一門面向對象的開發語言,同C#/java一樣一切皆對象,萬物皆從 Object開始。其事件模型那肯定也不例外了,詳細見下事件類繼承圖:
?????????????????????
?????上圖概括了整個ActionScript 3.0的完整的事件體系,里面的詳細這里就不作介紹,在后續的文章里將會一步一步的涉及到這些內容,詳細請關注后續文章的詳細介紹。
?
三、事件流和事件對象
?????事件流和事件對象是事件中非常重要的兩個概念,下面是官方的解說:
??????事件流 (Event Flow):如果顯示列表中的對象(屏幕上顯示的對象)發生事件,則會向包含該對象的所有對象通知此事件,并依次通知其事件偵聽器。此過程從舞臺開始,并在顯示列表中一直進行到發生事件的實際對象,然后再返回到舞臺。此過程稱為事件流。
??????事件對象 (Event Object):此對象包含發生的特定事件的相關信息,當調度事件時,此信息將被發送到所有偵聽器。
?????雖然在ActionScript 3.0中相比 2.0有很大的改進,所謂萬變不離其本,事件流同樣還是分為三大階段:捕獲事件階段、目標階段和冒泡階段。請參考下圖:
???????????????????????????????????????????????????????
??????捕獲階段:從根節點到子節點,檢測對象是否注冊了事件監聽函數,是則調用監聽函數。
??????目標階段:調用目標對象本身注冊的監聽程序。
??????冒泡階段:從目標節點到根節點,檢測對象是否注冊了事件監聽函數,是則調用監聽函數。
?? 注整個事件流階段從某中角度來說也可以理解為請求--處理--響應的方式。?
?????事件對象主要有兩個作用:第一,事件對象通過將特定事件的信息存儲在一組屬性中,來代表實際事件。第二,事件對象包含一組方法,可用于操作事件對象和影響事件處理系統的行為。如C#語言一樣,ActionScript 3.0 中Flash Player API也定義了一個Event事件類做為所有事件的基類,Event 類定義一組基本的適用于所有事件對象的屬性和方法。當發生事件時,Event對象將作為參數傳遞給事件監聽器。
?????這作為了解便是,在實際編程中用得不是很多,其用法和C#/Java一樣。這里就不做詳細介紹,只需要記住下面兩個重要的方法便OK。
?????1、evt.stopImmediatePropagtion():void 防止對事件流中當前節點中和所有后續節點中的事件偵聽器進行處理。?
?????2、evt.stopPropagetion():void 防止對事件流中當前節點的后續節點中的所有事件偵聽器進行處理。
?
四、創建自定義事件
?????上面已經介紹Event做為所有事件的基類,那么創建一個自定義的事件肯定離不開它,需要繼承事件基類Event。
??????創建自定義事件說難又不難,說簡單也非簡單,具體需要根據實際需求而定,在這里一時半會也講不清楚。在ActionScrip 3.0中要創建自定義事件和步驟和C#/Java是差不多的,原理都是一樣,所以這里我就不做過多的介紹,詳細大家可以查看相關書籍或官方提供的相關文擋。
?
?
?
?
?
?
轉自:http://www.cnblogs.com/beniao/archive/2008/12/22/1360148.html
轉載于:https://www.cnblogs.com/qiantuwuliang/archive/2010/04/06/1705202.html
總結
以上是生活随笔為你收集整理的ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ext.DomHelper类的使用示例(
- 下一篇: SQLite.NET在Win7(64位)