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

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

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