Flex 軟件中常常須要使用一些外部的資源,如圖片、聲音、SWF或字體,雖然你也能夠在軟件運行的時候引入和載入,可是也可能常常須要直接將這些資源編譯(Compile)到軟件中,也就是直接嵌入資源(Embedding Assets)。 Flex 中能夠直接嵌入圖片image,影片movie,MP3,和TrueType文字。app
嵌入資源的利處:編輯器
一、比起在運行時訪問資源,對嵌入資源的訪問速度更加快速;svg
二、能夠用簡單的變量訪問方式,在多個地方引用所嵌入的資源。這是變量就表明資源,提升寫代碼的效率;函數
嵌入資源的弊處:測試
一、增大了SWF文件的大小,由於是將資源直接包含;字體
二、因爲SWF文件增大,將使得初始化的速度變慢;網站
三、當資源改變後,須要從新編譯SWF文件;spa
1. 用[Embed]元數據標籤能夠嵌入GIF,PNG,JPEG,或者MP3文件。ActionScript代碼的順序很是重要。你必須在聲明變量前添加[Embed]元數據標籤,並且這個變量的類型會是Class。以下:orm
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);
}
}
}xml
[Embed]元數據標籤帶有兩個屬性: Source:(必選的)使用這個屬性來確認嵌入資源的名稱和路徑。若是你嵌入了一個元件,你能夠用元件的關鍵詞肯定元件嵌入到SWF中的名字。 mimeType:(可選的)使用這個屬性來肯定嵌入資源的MIME類型。若是這個屬性沒有設置,Flash會在源屬性中根據導入資源文件的擴展名載入合 適的類型。
Flash CS4專業版支持與Flex同樣的一系列MIME類型:
application/x-font
application/x-font-truetype
application/x-shockwave-flash
audio/mpeg
image/gif
image/jpeg
image/png
image/svg
image/svg-xml
2.元數據也能夠應用到幀腳本。
3.除了嵌入圖片文件,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僅僅支持類和成員變量)
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);
}
}
}
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'的字體沒有被找到在...)
還有另一種類型的文件也能夠採用 [Embed] 元數據標籤嵌入到SWF中:XML文件。
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參數。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在開發 Flex 或 AIR 應用程序的時候,若是須要把圖片、聲音等資源嵌入到目標文件中的時候,通常須要使用到 Embed
Embed 標記的功能就是把資源生成一個相應的類,如下是 Embed 標記應的地狀況說明:
一、在代碼中使用 Embed 標記
[Embed(source="../assets/hello.png")]
public var Hello:Class;
上面的代碼聲明瞭一個 Hello 類,但因爲應用了 Embed 標記,因此編譯後, 編譯器會把資源與 Hello 類關聯起來,並把 Hello 類生成爲 mx.core.BitmapAsset 類的子類(根據資源的不一樣,將有不會同的父類),因此能夠在代碼中這樣使用:
var myHello:Hello = new Hello() as BitmapAsset;
myHello.smooting = true; // smooting 屬性爲 BitmapAsset 類的屬性
二、代碼 CSS 和 MXML 中使用 Embed 標記
下面分別是在 CSS 和 MXML 中使用 Embed 標籤的代碼:
CSS:
Application {
backgroundImage:Embed(source="../assets/hello.png");
}
MXML:
<mx:Application backgroundImage='@Embed("../assets/hello.png")'>
</mx:Application>
上面的兩段代碼看起來 Embed 沒有與相關的類關聯,但我想 FLEX 編輯器把生成一個匿名類,而後把生成的類設置給屬性或樣式
圖片 九宮格
Embed 標記除了 source 參數外,還有其餘參數,若是是圖片資源,能夠設置 scaleGridTop、scaleGridLeft、scaleGridRight、scaleGridBottom 四個參數,若是資源爲 swf,能夠設置 symbol 參數。
scaleGridTop、scaleGridLeft 等參數是配製一種叫作 9 切片的縮放技術,就是把圖片切成 9 塊,以下圖:
(原圖是 ,5 * 5 方格圖,每一個方格 4 個像素,上圖是被放大後的效果)
上圖在四條紅線的位置把圖片塊成的 9 塊,四個角,四條邊和中間一塊,在縮放的時候,四個角始終不變,兩條橫向邊只縮放寬度,高度不變,兩條縱向的邊只縮放高度,寬度不變,中間一塊寬和高同時 縮放,這就是 9 切片縮放的原理。使用這種技術通常是在使用圖片作控件的皮膚時使用,不少控件的樣式四個角是圓的或不規則的,因此使用這種縮放技術能夠保證控件與圖片的大 小不一致的時候,圖片看起來也不變形。
上面圖片的交圖對 Embed 標籤的設置是:
Embed(source="../assets/msk.gif", scaleGridTop="4", scaleGridLeft="4", scaleGridRight="16", scaleGridBottom="16");
symbol 屬性配全 swf 資源一塊兒使用,symbol 屬性是設置爲 swf 裏面的 MovieClip 對象的名稱,就是指定資源只使用 swf 中特定的 MovieClip 對象