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 对象

相关文章
相关标签/搜索