-
嵌入GIF,PNG,JPEG,MP3文件
package { import flash.display.*; public class GIFEmbed extends Sprite { [Embed(source = "../assets/talapetra.gif")] private var theClass:Class; public function GIFEmbed () { var displayObj:DisplayObject = new theClass(); addChild (displayObj); } } }
代碼中的高亮行包括了源屬性,指示了嵌入的名稱和資源的路徑。你可以使用絕對路徑或者文檔文件的相對路徑來包含嵌入的描述。在這個示例中,這個名稱為GIFEmbed.as的ActionScript類指示了定位到命名為\assets的文件夾中,這個文件夾包含了talapetra.gif的圖片文件。
注意:[Embed]元數據標簽可以有另外一個可選屬性,mimeType,它允許你指定鏈接資源的MIME類型。我將在后面再具體的討論這個屬性。
ActionScript代碼的順序非常重要。你必須在聲明變量前添加[Embed]元數據標簽,而且這個變量的類型會是Class。在下面的代碼片段中,[Embed]元數據標簽中一個成為theClass,類型聲明為Class的私有變量前使用:
[Embed(source = "../assets/talapetra.gif")] private var theClass:Class;
在名稱為GIFEmbed的函數內部,一個新的類型為DisplayObject命名為displayObj的變量被用來實例化theClass為一個新的DisplayObject。下一行使用addChild方法將displayObj添加到了顯示列表當中,並在舞台上渲染:
var displayObj:DisplayObject = new theClass(); addChild (displayObj);
參考示例文件,查看文件夾結構,確認GIFEmbed.as類文件和名稱為 talapetra.gif的GIP圖片的路徑(放在assets目錄中)。
[Embed]元數據標簽帶有兩個屬性: Source:(必選的)使用這個屬性來確認嵌入資源的名稱和路徑。如果你嵌入了一個元件,你可以用元件的關鍵詞確定元件認嵌入到SWF中的名字。 mimeType:(可選的)使用這個屬性來確定嵌入資源的MIME類型。如果這個屬性沒有設置,Flash會在源屬性中根據導入資源文件的擴展名載入合適的類型。
Flash CS4專業版支持與Flex一樣的一系列MIME類型
-
在幀腳本中使用[Embed]標簽
同前面列出的過程一樣,元數據也可以應用到幀腳本。在這段中,我會描述怎么利用[Embed]標簽來嵌入元數據到幀腳本中。如果你跟着示例文件,請參閱<Embed on Frame Script>目錄下的文件:
1、通過選擇"文件">"新建">"Flash文件(ActionScript 3.0)"菜單來創建一個新的Flash CS4文件;
2、將這個Flash文件保存為GIFEmbed.fla。
3、選擇圖層1的第一幀並打開動作面板("窗口">"動作")。
4、拷貝如下代碼,並粘貼到腳本窗口:
[Embed(source="../assets/talapetra.gif")] var theClass:Class; var displayObject:DisplayObject = new theClass(); addChild(displayObject);
5、重復前面一個段落的10-13步測試SWF文件,並更新Flex SDK目錄庫路徑來添加flex.swc文件。
-
從SWF文件中嵌入一個元件
package { import flash.display.*; import flash.events.MouseEvent; import flash.geom.Rectangle; public class SWFEmbed extends MovieClip { public var displayObj:DisplayObject; [Embed(source="Movie.swf", symbol="Slice9")] var theClass:Class; public function SWFEmbed() { displayObj = new theClass(); addChild(displayObj); displayObj.x = 200; displayObj.y = 220; } } }
在這段代碼中,[Embed]元數據標簽使用了source參數來確認將被嵌入的SWF文件的名稱和路徑。symbol參數來確認特殊元件的名稱,這個元件是從source參數關聯的SWF文件中嵌入的。
-
使用[Embed]標簽嵌入字體
除了嵌入圖片文件,SWFs,還有SWFs中的元件以外,[Embed]元數據標簽還可以嵌入OpenType和TrueType字體到Flash文件中。在這個段落中,我將演示怎么使用[Embed]元數據標簽在Flash CS4中嵌入字體。這篇文章將定你已經安裝了Arial Bold字體在你的系統中。如果你沒有這個字體,你可以從 SearchFreeFonts.com或者類似網站上購買它。
注意:[Embed]元數據標簽僅僅支持類和成員變量,如果你嘗試在函數前使用[Embed]標簽,如下的編譯錯誤將會顯示:"Embed is only supported on classes and member variables."(Embed僅僅支持類和成員變量)
如果你是跟隨教程學習,請參閱示例文件中TrueType目錄。
1、選擇"文件">"新建">"ActionScript文件",創建一個新的ActionScript文件。
2、保存文件為FontClass.as。
3、拷貝並粘貼如下代碼到腳本窗口中:
package { import flash.text.*; import flash.display.MovieClip; public class FontClass extends MovieClip { [Embed(source="Arial Bold.ttf", fontName="myFont", fontWeight="bold", advancedAntiAliasing="true", mimeType="application/x-font")] private var theClass:Class; public function FontClass () { var t:TextField=new TextField(); t.embedFonts = true; var textFormat:TextFormat=new TextFormat(); textFormat.size = "30"; textFormat.font = "myFont"; t.text = "[Embed] metadata rocks!!!"; t.width = 500; t.setTextFormat (textFormat); addChild (t); } } }
上面代碼中的高亮部分,[Embed]元數據標簽中使用到如下的參數來嵌入一個Arial bold字體:
Source: 這個參數指出了font文件的位置。如果願意,你可以使用systemFont參數確認名稱而不是source來嵌入系統字體。 fontName: 這個參數指明了嵌入字體的名稱,字體的名稱是一個唯一標識,所以你可以通過名稱來調用字體。 mimeType: 這個參數描述了嵌入元數據的MIME類型。因為你在這個例子中嵌入了一種字體,你可以設置MIME類型為"application/x-font"。 fontWeight: 這個參數表明了字體的粗細,如粗體或者正常。
注意:如果字體有粗細,並且你沒有在[Embed]元數據標簽中包含fontWeight參數,當測試SWF文件是,你會看到如下編譯錯誤:
Exception during transcoding: Font for alias 'myFont' with plain weight and style was not found at... (意外的轉換:帶有粗細和樣式的別名為'myFont'的字體沒有被找到在...)
隨着嵌入字體的路徑(如圖11)。
-
使用嵌入的XML文件
在這篇文章的前面段落中,我講述了使用 [Embed] 元數據標簽嵌入圖形文件,SWF文件,SWF文件中元件,還有字體等到SWF中。所有這些可能性都是非常有用的,不過還有另外一種類型的文件也可以采用 [Embed] 元數據標簽嵌入到SWF中:XML文件。
我保留最好的到最后,這是因為這個功能對於將外部數據導入到SWF中非常用用 -- 而且很直接地就可以完成。根據嵌入的XML數據,你可以做一些有趣的事情,為將來的工程記住這個是一個極好的提醒。
下面的示例提供了使用 [Embed] 元數據標簽嵌入一個XML文件的一個說明。如果你跟隨教程學習,請參閱示例文件的XML目錄。
1、選擇"文件">"新建">"Flash文件(ActionScript 3.0)"創建文件,並保存文件為XMLLoader.fla。
2、選擇"文件">"新建">"ActionScript文件"創建文件,並保存文件為 XMLLoader.as。
3、當XMLLoader.as被激活,拷貝並粘貼如下如下代碼到腳本窗口:
package { import flash.display.*; import flash.utils.ByteArray; public class XMLLoader extends Sprite { [Embed(source = "training.xml",mimeType = "application/octet-stream")] private var theClass:Class; public function XMLLoader () { var xmlObj:Object = new theClass(); trace(xmlObj); } } }
注意:當嵌入XML數據時,你必須將mimeType參數設置為"application/octet-stream"。 Flash不能通過XML文件的擴展名檢測正確的MIME類型,所以無論什么時候你嵌入XML數據時都要設置mimeType參數。
4、將代碼粘貼到腳本窗口后,確保保存XMLLoader.as文件。