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