flex embed 使用

Flex 軟件中常常須要使用一些外部的資源,如圖片、聲音、SWF或字體,雖然你也能夠在軟件運行的時候引入和載入,可是也可能常常須要直接將這些資源編譯(Compile)到軟件中,也就是直接嵌入資源(Embedding Assets)。 Flex 中能夠直接嵌入圖片image,影片movie,MP3,和TrueType文字。app

嵌入資源的利處:編輯器

一、比起在運行時訪問資源,對嵌入資源的訪問速度更加快速;svg

二、能夠用簡單的變量訪問方式,在多個地方引用所嵌入的資源。這是變量就表明資源,提升寫代碼的效率;函數

嵌入資源的弊處:測試

一、增大了SWF文件的大小,由於是將資源直接包含;字體

二、因爲SWF文件增大,將使得初始化的速度變慢;網站

三、當資源改變後,須要從新編譯SWF文件;spa

 

嵌入資源的語法:
根據嵌入位置的不一樣,語法也各不一樣:
一、[  Embed (parameter1, paramater2, ...)] 元數據標籤
           這主要在AS文件中,或MXML文件中的 <mx:Script>標籤中使用。
二、@  Embed (parameter1, paramater2, ...) 指令
           這主要在MXML標籤中使用。
三、  Embed (parameter1, paramater2, ...) 指令
           這主要在 <mx:Style> 樣式表中使用。
根據狀況的不一樣嵌入資源  Embed 的返回類型能夠是Class或String。
 

 

 

 

 

Flex Embed嵌入資源

[Embed(source = "training.xml",mimeType = "application/octet-stream")]

 

 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 塊,以下圖:

 

Embed用法筆記 - 凌晨 - 坦然……
(原圖是 ,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 對象

相關文章
相關標籤/搜索