第三部分 Flash 的媒體組織方式(上)
一、資源管理
庫(Library)是Flash文檔的資源管理器,所有可被Flash利用的資源都可以放在庫中,并接受庫的管理。在使用Flash進(jìn)行創(chuàng)作設(shè)計或軟件開發(fā)之前,首先要將媒體內(nèi)容添加至Flash文檔,當(dāng)然也可以在 Flash 中直接創(chuàng)建矢量圖或文本?;蛘邚耐獠繉?dǎo)入矢量圖、位圖、視頻和聲音;可以創(chuàng)建元件,即可重用的媒體內(nèi)容。在運(yùn)行時,也可以使用腳本動態(tài)地將媒體內(nèi)容添加至文檔。
對于已經(jīng)導(dǎo)入的媒體資源,F(xiàn)lash使用庫(Library)對它們進(jìn)行管理。從另外一個角度來說,庫是用來存儲已經(jīng)導(dǎo)入的文件,并把它們作為可被重復(fù)利用的資源。從外部導(dǎo)入的文件和在Flash中直接繪制的圖形是進(jìn)行創(chuàng)作的基礎(chǔ)。利用元件可以使用嵌套(nesting)的方式進(jìn)一步組織這些媒體,使之成為獨(dú)立但可重復(fù)利用的模塊。元件包括:圖形(Graphic)、按鈕(Button)和電影剪輯(MovieClip)。庫還可以包含添加到文檔的組件(Component),組件作為編譯好的剪輯顯示在庫中。不同的Flash文檔間還可以進(jìn)行庫項(xiàng)目的交流,一個Flash文檔可以打開另一個Flash文檔的庫,從中獲取當(dāng)前文檔所需要的庫項(xiàng)目,以實(shí)現(xiàn)資源的共享。庫可以作為資源永久保存,F(xiàn)lash啟動時被自動加載,F(xiàn)lash還提供了若干個范例庫以供用戶使用。
同時,庫資源可以作為 SWF 文件導(dǎo)出到一個 URL,從而創(chuàng)建運(yùn)行時共享庫。這里需要涉及到兩個概念:資源文檔和目標(biāo)文檔。所謂目標(biāo)文檔是指當(dāng)前正在編輯,需要利用共享庫中的資源的文檔,而資源文檔是指已經(jīng)被導(dǎo)出到某個URL的swf文件,用于存儲庫資源,供目標(biāo)文檔使用。這里的URL必須符合Flash Player 7安全沙箱的要求,簡單地說,目標(biāo)文檔和資源文檔在發(fā)布后必須位于同一個域名或指定域名下,然而這一點(diǎn)在本地調(diào)試時確實(shí)不受限制的。在本地運(yùn)行的Swf或Exe文件也不受這個安全機(jī)制限制,可以直接使用運(yùn)行時共享庫中的資源。運(yùn)行時共享庫對于RIA開發(fā)非常有用,使庫項(xiàng)目的開發(fā)和軟件整體整合開發(fā)分離,并且共享資源庫可以被多個目標(biāo)文檔所使用,提高了庫項(xiàng)目資源的可復(fù)用性。
庫還可以對庫項(xiàng)目進(jìn)行管理,創(chuàng)建文件夾對庫項(xiàng)目進(jìn)行分類,修改庫項(xiàng)目的屬性。被導(dǎo)入的資源可以在庫中直接調(diào)用其它編輯程序進(jìn)行編輯,編輯完成后Flash可以直接更新庫中原來的項(xiàng)目??梢灾苯舆x中未使用的庫項(xiàng)目,這樣開發(fā)者便可以刪除一些無用的庫項(xiàng)目,精簡庫資源,使Flash文檔更小。這里需要注意的是,一般情況下,未使用的庫項(xiàng)目并不包含在發(fā)布后的Swf文檔中,只有當(dāng)庫項(xiàng)目被導(dǎo)出為運(yùn)行時共享庫時,未使用的庫項(xiàng)目才同時被導(dǎo)出到Swf文檔中。
二、時間軸上對象的組織
對象在Flash中被稱為實(shí)例(Instance),而庫中的庫項(xiàng)目通常被成為符號(Symbol),類似于通常面向?qū)ο缶幊讨械念?。所謂“時間軸上對象的組織”也即時間軸上實(shí)例的組織。
時間軸被分為很多的小格,連續(xù)的時間被離散化,每一小格對應(yīng)了一個狀態(tài)——Flash執(zhí)行的狀態(tài),小格被稱為:幀(Frame)。幀包括兩種,關(guān)鍵幀(Key Frame)和普通幀(Frame)。在關(guān)鍵幀中可以放置內(nèi)容,而普通幀則不允許放置內(nèi)容,并且由Flash根據(jù)關(guān)鍵幀的內(nèi)容自動生成。不同時間軸之間是相互獨(dú)立的,它們的播放是互不影響的。這里需要指出的是,單幀的時間軸與多幀時間軸的區(qū)別,單幀的時間軸并不循環(huán)播放,而多幀的時間軸在沒有腳本語句控制的情況下會連續(xù)循環(huán)地播放。
時間軸與時間軸之間的組織是一種樹形結(jié)構(gòu),它們始終以一種嵌套(nesting)的方式進(jìn)行組織。父時間軸包含了子時間軸,并可以相互引用和控制。主時間軸(_root)是這個樹形結(jié)構(gòu)的根節(jié)點(diǎn)。在任意節(jié)點(diǎn)下的子節(jié)點(diǎn)集合并非一直保持原有的狀態(tài),隨著時間軸上播放頭的推進(jìn),其子節(jié)點(diǎn)集合也在發(fā)生著變化,所以這棵樹在時間上是一棵動態(tài)樹。
正是由于這樣一種組織方式,每一個對象都有一個路徑指明對象在這棵樹中的位置,以便腳本引用。路徑包括絕對路徑和相對路徑。絕對路徑從主時間軸開始;而相對路徑由當(dāng)前位置開始,例如MC._parent指MC的父時間軸。

Flash 時間軸的樹形組織方式(1)

Flash 時間軸的樹形組織方式(2)
對
象的生存期和作用域在時間軸上被定義。首先,對象在關(guān)鍵幀中被創(chuàng)建,并在其后的普通幀中一直存在(電影剪輯、組件等對象還可以被腳本引用),直到遇到一個
關(guān)鍵幀,對象被移除或被重新創(chuàng)建。如果前后兩個關(guān)鍵幀中對象被賦的引用名不同,對象將被重新創(chuàng)建和初始化。多幀循環(huán)的時間軸在進(jìn)行循環(huán)播放時,從最后一幀
跳到第一幀時時間軸將被刷新,這與使用腳本語句進(jìn)行播放控制的效果是一樣的。時間軸被刷新后,時間軸上的所有對象將被清除,并重新創(chuàng)建。在后面將對時間軸
刷新進(jìn)行詳細(xì)討論。
事實(shí)上,F(xiàn)lash中對象的組織并不僅僅只是在時間軸的組織,深度(Depth)組織方式與時間軸組織一樣重要。所以在單個的時間軸上,F(xiàn)lash的對象組織方式是二唯的,即時間軸方向和深度方向。
在大多數(shù)的可視化編程中,需要對屏幕上的對象進(jìn)行組織。這種組織意味著各個可視對象在屏幕上的位置以及它們互相層疊的方式。在Flash中可視化屏幕對象可以是電影剪輯(MovieClip)、按鈕(Button)、文本框(TextField)和組件(Component)。當(dāng)使用Actionscript進(jìn)行編程時可以使用一定的方式來控制他們的層疊方式,當(dāng)然,在Flash的編輯狀態(tài)下也可以使用菜單命令對屏幕對象的層疊方式進(jìn)行調(diào)節(jié)。
在Flash 的編輯環(huán)境下,對象的組織方式是不嚴(yán)格的,使用Flash 腳本可以實(shí)現(xiàn)與編輯狀態(tài)下一樣的控制,它可以在程序中直接給出屏幕對象的組織方式。但是在腳本中,用戶僅可以控制電影剪輯、按鈕、非靜態(tài)的文本對象以及組件,因?yàn)橹挥兴麄儾攀瞧聊辉?,可以被指定一個引用名,以便在Actionscrip中實(shí)現(xiàn)對他們的操作和控制,而其它的那些可視對象,例如靜態(tài)文本、色塊、線條始終位于編輯時的原始位置。值得指出的是,組件(Component)事實(shí)上是被編譯后的電影剪輯,其行為特性與電影剪輯是類似的。
前面提到過,F(xiàn)lash的時間軸組織是一棵在時間軸方向上動態(tài)的樹,并且主時間軸(_root)是這棵樹個根節(jié)點(diǎn)。需要注意的是,這里所說的深度(Depth)并非樹的深度。深度是對不同時間軸層次的描述,它表現(xiàn)在兩個方面:對象在屏幕的顯示層次(Z-Order)和對象的加載順序(Load-Order)。另外時間軸在其父時間軸上有一定的生存期。因?yàn)闀r間軸往往包含在具體的對象中,所以其生存期的概念與對象生存期的概念是一致的。
|