ActionScript 3.0從入門到精通:第11章 顯示對象容器 (教學PPT下載).pptx_第1頁
ActionScript 3.0從入門到精通:第11章 顯示對象容器 (教學PPT下載).pptx_第2頁
ActionScript 3.0從入門到精通:第11章 顯示對象容器 (教學PPT下載).pptx_第3頁
ActionScript 3.0從入門到精通:第11章 顯示對象容器 (教學PPT下載).pptx_第4頁
ActionScript 3.0從入門到精通:第11章 顯示對象容器 (教學PPT下載).pptx_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第11章 顯示對象容器,前兩章介紹到的對象都是二維概念的顯示對象。ActionScript中有一類對象在二維空間的基礎上增加了z軸順序,雖然達不到z軸坐標的精確程度,也無法表現(xiàn)3D空間效果,但是z軸順序的引入無疑也提高了顯示對象的表現(xiàn)力,這類對象被稱之為“顯示對象容器”。通常z軸順序也被稱之為深度。 在z軸順序之外,如果再加上時間這一個維度,顯示對象就成為了一個四維對象,就可以表現(xiàn)對象的運動變化。ActionScript通過“時間軸”來描述時間維度。同時具有深度和時間軸的是MovieClip類,它也是使用最為廣泛的顯示對象。,11.1 顯示對象容器概述,顯示對象容器在ActionScript中

2、是一個抽象類,稱為DisplayObjectContainer。它不能被直接實例化,但卻描述了子類的共同性質(zhì):深度。DisplayObjectContainer的子類包括Loader、Sprite和Stage。 顯示對象容器的命名非常形象,它就象一個真正的容器。其它顯示對象可以加載到容器中去,對容器進行操作,也同時會影響到容器內(nèi)的對象。例如,對容器進行變形或縮放時,它包含的對象也會一起變形或縮放。如果從顯示列表中刪除容器,則它所包含的所有對象也會被刪除。 顯示對象容器內(nèi)的顯示對象通過深度組織,每個對象獲得一個索引值。這個值越小則顯示對象越靠下,越大則越靠上。視覺上,上面的對象會遮蓋住下面的對象

3、。,11.1.1 添加子對象,顯示對象容器的概念始終圍繞著它所包含的子對象(child)??梢允褂胊ddChild方法將子對象加載到容器中,其語法如下。 容器.addChild(子對象); 例如,以下代碼將一個名為child的Shape實例加載到名為container的Sprite實例中。 var container:Sprite = new Sprite(); var child:Shape = new Shape(); container.addChild(child);,11.1.1 添加子對象,注意:當容器container加載了子對象child后,容器和子對象都還處于無法顯示的狀態(tài)。

4、需要把它們再“裝入”舞臺這個最大的容器中。即使用如下語句令舞臺加載container 。 stage.addChild(container); 在這一過程中,stage是容器,而container成了子對象。當舞臺加載了子對象后默認顯示該對象,這就是我們學說的“加載到顯示列表”。而一般主時間線為文檔類的實例,因此在Flash CS3的主時間線上,加載到顯示列表的代碼也??梢允÷缘貙憺橐韵聝煞N形式。 this.addChild(container); addChild(container);,11.1.2 子對象的深度,子對象的z軸順序表現(xiàn)為深度,深度可以認為顯示對象容器中各個對象的層疊順序。當

5、一個子對象使用addChild方法加載到容器中時,ActionScript自動為其分配一個索引,最先加載子對象的索引為0,以后順次增加。索引較小的對象會顯示在索引較大對象的下方。 例如,以下代碼中container先加載child1,再加載child2。因此,child1會顯示在child2的下方。 container.addChild(child1); container.addChild(child2);,11.1.3 numChildren屬性,一個顯示對象容器中有幾個子對象,就有幾個完全不同、由0開始遞增的索引??梢允褂萌萜鞯腸hildNum屬性取得子對象的個數(shù),如下列代碼。,11.1

6、.3 numChildren屬性,當已知numChildren時,子對象的索引順序就是由0變化到(numChildren-1)。一般ActionScript會用numChildren作為遍歷容器時的參數(shù)使用,如下列代碼。 如果numChildren值為0,則表示當前的容器中不含子對象,11.1.4 對深度索引的控制,ActionScript在加載時,除了默認的加載順序外,也可以使用addChildAt方法指定子對象的深度索引,其語法如下。 容器.addChildAt(子對象,索引); addChildAt可以自由指定加載子對象的索引值,可以指定新加載的子對象位于任意其他子對象之間。,11.1.

7、5 刪除子對象,從一個顯示對象容器中刪除子對象時使用removeChild或removeChildAt方法,其語法如下。 容器. removeChild (子對象); 容器. removeChildAt (索引); removeChild直接刪除參數(shù)指定的子對象,removeChildAt則會刪除處于索引值深度的子對象。明確知道子對象時可以直接使用removeChild方法,有些情況無法了解具體加載到容器中的子對象,則可以通過索引值將其刪除。 例如,經(jīng)常使用以下的循環(huán)結構刪除容器中的所有子對象。 /只要當前容器的子對象數(shù)不為0,即刪除索引0處的子對象 while(container.numCh

8、ildren0) container.removeChildAt(0); ,11.1.6 getObjectsUnderPoint方法,getObjectsUnderPoint是顯示對象容器用于檢測“碰撞”的方法。它可以返回某一點上容器所有子對象(包括孫,曾孫)的數(shù)組結構。其語法如下。 容器.getObjectsUnderPoint(點); 說明:這里的“點”指的是一個Point實例。 一般來說,鼠標偵聽器的節(jié)點對象是處于最上層的顯示對象。例如當一個按鈕被另一個按鈕遮住時,將無法作為節(jié)點對象接收事件。此時可以使用getObjectsUnderPoint方法,它將返回一個數(shù)組,包含所有位于指定點

9、的對象。,11.2 Stage類,Stage類是一個非常有代表性,也是一個特殊的顯示對象容器。所有呈現(xiàn)在用戶面前的顯示對象都需要加載到舞臺之后才得以顯示。同時Stage類也有其特殊性。,11.2.1 獨一無二的stage,Stage不同于一般的顯示對象或容器,它不能實例化,不可以使用new Stage這樣的構造函數(shù)。這是因為Flash在初始化時已經(jīng)建立了一個獨一無二的Stage實例stage(注意大小寫)。一個Flash影片同時只能有一個舞臺實例。 stage由于其存在的特殊性,所以一些屬性設置雖然能夠應用于普通的顯示對象容器中,但是卻不允許應用于stage。,11.2.2 stage的全局屬

10、性,stage(Stage的唯一實例)具有多個屬性。通過設置這些屬性,可以影響整個Flash影片。以下我們介紹常用的幾個全局屬性。 frameRate屬性: frameRate屬性可以獲取或設置舞臺的幀頻,它能夠接受的有效數(shù)字從0.01到1000。新建Flash文件的幀頻為12fps,如果要求較好的動畫效果,一般會設置為24,30甚至60不等。由于內(nèi)部刷新機制的影響,幀頻一般來說并不穩(wěn)定。有時應該描繪的顯示對象較為復雜,會拖慢顯示。因此,一般不使用frameRate作為計時器,也很難根據(jù)當前播放的時間來獲取實際播放的幀數(shù)。,11.2.2 stage的全局屬性,quality屬性: qualit

11、y屬性控制Flash影片的質(zhì)量,它由低到高可以接受4個參數(shù)中的一個。 StageQuality.LOW(“l(fā)ow”):此時Flash影片以低品質(zhì)呈現(xiàn),不消除圖形的鋸齒,位圖也不進行平滑處理; StageQuality.MEDIUM(“medium”):此時Flash影片以中等品質(zhì)呈現(xiàn),使用2* 2像素網(wǎng)格消除圖形鋸齒,但不對位圖進行平滑處理。,11.2.2 stage的全局屬性,StageQuality.HIGH(“high”):此時Flash影片以高品質(zhì)呈現(xiàn),使用4 x 4像素網(wǎng)格消除圖形鋸齒,如果影片是靜態(tài)的,則對位圖進行平滑處理。Flash Player默認的呈現(xiàn)品質(zhì)是high。 Sta

12、geQuality.BEST(“best”):此時Flash影片以最佳品質(zhì)呈現(xiàn),使用4 x 4像素網(wǎng)格消除圖形鋸齒,并且始終對位圖進行平滑處理。 說明:quality接受的參數(shù)存儲于常量中,如常量StageQuality.LOW中存放的是字符串“l(fā)ow”。,11.2.2 stage的全局屬性,displayState屬性: displayState屬性用于設置當前的Flash影片的顯示狀態(tài)。它可以接受以下參數(shù)之一。 StageDisplayState.FULL_SCREEN(“fullscreen”):設置Flash以全屏模式播放。 StageDisplayState.NORMAL(“norm

13、al”):設置Flash以普通模式播放。 出于安全考慮,F(xiàn)lash Player不允許系統(tǒng)自動切換為全屏模式,要求必須通過用戶交換(鼠標點擊或按下鍵盤)才能夠實現(xiàn)全屏。,11.2.3 stage特殊事件,stage支持如下3個特殊事件類型。 FullScreenEvent.FULL_SCREEN(“fullScreen”):當Flash程序成功切換為全屏模式后調(diào)度。 Event.MOUSE_LEAVE(“mouseLeave”):當鼠標離開離開Flash程序播放窗口時調(diào)度。 Event.RESIZE(“resize”):當縮放模式設置為“noScale”時,播放窗口發(fā)生變化(被拖動)時調(diào)度。,

14、11.3 Sprite類,Sprite類是最基本的顯示對象容器之一。它既是顯示對象,同時也可以充當顯示對象容器。它有z軸順序,但不包含時間軸。如之前提到過的,一個Flash文件的文檔類只能繼承自Sprite類或MovieClip類。當一個程序沒有時間軸時,即繼承Sprite類;有時間軸時則繼承MovieClip類。 Sprite類擁有全部顯示對象容器的屬性和方法,同時它還添加了按鈕模式和拖放模式。這兩種特殊模式增加了Sprite類的交互性。,11.3.1 按鈕模式,當設置Sprite實例的buttonMode屬性為true時,即打開了它的按鈕模式。此時當鼠標指針經(jīng)過時會觸發(fā)手形光標的顯示。當S

15、prite實例獲得焦點時按下【Enter】或空格鍵時可以接收鼠標點擊(click)事件。,11.3.2 拖放模式,Sprite允許鼠標對其進行拖放。其語法如下。 對象.startDrag(); 終止拖放模式的語法如下。 對象.stopDrag(); 說明:startDrag方法一般情況下不須提供參數(shù),實際上它具有兩個有默認值的參數(shù)。其中之一名為lockCenter,它指示當前的拖放行為是否始終鎖定對象的中央,其默認值為false;另一個參數(shù)是一個矩形實例,它代表對象可拖動的范圍,其默認值為null。,11.4 MovieClip類,如前所述,MovieClip類有平面坐標,z軸深度,同時也具有

16、時間軸。是一個“四維”的對象。它的前“三維”繼承自Sprite,自身的特色在于對時間軸的控制。介紹MovieClip類時,我們將著重介紹這一特性。,11.4.1 時間軸的基本單位,在MovieClip類中,時間軸被分割為幀。幀是時間軸的最小單位,它的序號代表著播放頭的播放順序。在Flash CS3的時間軸面板上,每個小格子代表1幀,如下圖所示。 播放頭按幀的序號順序進入各幀,并執(zhí)行幀上的代碼,之后描繪顯示對象。,11.4.1 時間軸的基本單位,除了幀這個最小單位外,在Flash程序中還支持自定義的“標簽”。標簽是幾個連續(xù)幀的集合,例如可以在第20幀處按下【F5】鍵插入幀,并選中120幀中的任意

17、幀,在屬性面板(Properties)的Frames屬性中輸入“opening”,此時120幀被自定義為一個叫做“opening”標簽。,11.4.2 時間軸的屬性和方法,了解了時間軸基本單位后,再來看MovieClip的屬性就簡單得多了,如下表所示。,11.4.2 時間軸的屬性和方法,與上述屬性相對應,MovieClip類中的特有方法也幾乎全部用來控制播放頭的位置,如下表所示。,11.4.3 播放頭事件,在介紹MovieClip類之前,我們已經(jīng)使用過很多次播放頭事件enterFrame了。這個事件在播放頭進入新幀時調(diào)度。如果播放頭不移動,或者只有一幀,則會反復以幀頻調(diào)度。系統(tǒng)會對所有偵聽此事

18、件的顯示對象同時調(diào)度此事件。 通常,播放頭只能逐幀前進。但配合播放頭事件enterFrame,也可以實現(xiàn)MovieClip的快進,快退等功能。,11.5 Loader類,Loader類是另一種顯示對象容器,它可用于加載SWF文件或位圖圖像(JPG、PNG、GIF)文件。被加載的顯示對象將作為 Loader 對象的子級添加。 在ActionScript中,將加載內(nèi)容明確地分為兩類,顯示對象全部使用Loader類加載,而文本和二進制數(shù)據(jù)則使用URLLoader類來加載。本章將專注于介紹顯示對象容器,后面章節(jié)將會介紹URLLoader 。 說明:顯示對象也可以通過一些手段還原為數(shù)據(jù),再通過URLLo

19、ader加載到Flash程序中。,11.5 Loader類,由于顯示對象容器的嵌套關系,被加載的SWF文件中的一些方法將發(fā)生指向性的錯誤。例如addChild、removeChild等。因此被Loader加載的文件需要有嚴格的語法格式,如下列代碼。 removeChild(mc); /mc的父(容器)刪除mc mc.parent.removeChild(mc); 對于一個獨立的Flash程序來說,兩行代碼都是正確的,但如果該代碼存在于一個即將被加載的SWF文件中時,則推薦使用第二種方式刪除mc實例。 其他有可能引發(fā)錯誤的省略寫法還包括直接使用addChildAt、removeChildAt、s

20、etChildIndex等。,11.5.1 加載顯示對象,Loader對象加載外部顯示對象的方法很簡單,但是因為牽涉到網(wǎng)絡環(huán)境(或本地加載速度),一定要在加載過程中偵聽加載狀態(tài)。Loader還沒有完全加載完就急著進行訪問。這是初學者經(jīng)常會犯的低級錯誤。 一般來說,Loader加載對象時按以下步驟進行。 (1)聲明Loader實例。 (2)使用load方法加載。 (3)偵聽Loader.contentLoaderInfo的“complete”或“init”事件。 (4)偵聽到事件后再處理loader對象(訪問屬性或方法等)。,11.5.2 訪問加載對象,當成功加載對象后,一般不僅僅要求顯示加載對象。如果被加載的對象

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論