2010-07-16 32 views
5

在AS3中,你可以嵌入圖形到類變量:嵌入許多圖形使用數組

 [Embed(source="MenuAssets.swf", symbol="topSquare")] 
     public var TopMenuItem:Class; 

我有上百個資產在這一個網站項目我做的,所以我想資產嵌入一個快速訪問的數組。

我可以這樣做嗎?它不編譯,所以我想知道它是否可能。

 public var MenuAssets:Array = [ 
      [Embed(source="MenuAssets.swf", symbol="topSquare")], 
      [Embed(source="MenuAssets.swf", symbol="botSquare")], 
      [Embed(source="MenuAssets.swf", symbol="leftSquare")], 
      [Embed(source="MenuAssets.swf", symbol="rightSquare")], 
     ] 

回答

4

您也可以將資產嵌入到單個FLA中。在FLA的庫中,給每個人一個類名稱,如「graphics.menu.RightSquare」,然後將其導出爲SWC。配置Flash Builder項目以將SWC作爲外部庫加載。然後,您可以執行如下操作:

import graphics.menu.*; 

new RightSquare(); 
+0

夢幻般的解決方案!萬分感謝,你真的救了我很多手工[嵌入]的工作。 – 2010-07-18 06:35:06

+0

甜,很高興它的工作! – Casey 2010-07-19 01:32:59

4

通常,Flex中的元數據標籤適用於類級別變量。

You must use the [Embed] metadata tag before a variable definition, where the variable is of type Class.

但是,您可以這樣做:

[Embed(source="MenuAssets.swf", symbol="topSquare")] 
public var TopMenuItem:Class; 

[Embed(source="MenuAssets.swf", symbol="leftSquare")] 
public var LeftMenuItem:Class; 

[Embed(source="MenuAssets.swf", symbol="rightSquare")] 
public var RightMenuItem:Class; 

[Embed(source="MenuAssets.swf", symbol="botSquare")] 
public var BottomMenuItem:Class; 

public var menuAssets:Array = [TopMenuItem, LeftMenuItem, 
           RightMenuItem, BottomMenuItem]; 
+1

+1。但是你可以自動生成數組,如我的答案所示。 ;) – back2dos 2010-07-16 10:24:20

5

恐怕你不能。您可以執行的操作如下:

public class Assets { 
    [Embed(source="MenuAssets.swf", symbol="topSquare")] 
    public static const TOP_SQUARE:Class; 
    //... more assets ... 
    public static function getAssets():Array { 
     var ret:Array = []; 
     for each (var s:String in describeType(Assets)[email protected]) ret.push(Assets[s]); 
     return ret; 
    } 
} 
+2

+1這很酷!也許你可以用一個唯一的字符串前綴所有的資產名稱,並將其從常量中過濾掉@ name - 以防在同一類中聲明其他常量。 – Amarghosh 2010-07-16 10:28:44

+0

@Amarghosh:好主意。 OTOH,我認爲將資產和實際常數分爲獨立的類是有意義的。 – back2dos 2010-07-16 11:08:33

+0

當然... :) – Amarghosh 2010-07-16 11:13:08