使用数组嵌入许多图形

Rob*_*cks 5 flash assets embedding actionscript-3

在AS3中,您可以将图形嵌入到Class变量中:

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

我在这个网站项目中有数百个资产,所以我想将资产嵌入数组中以便快速访问.

我可以这样做吗?它没有编译所以我想知道它是否可能.

        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")],
        ]
Run Code Online (Sandbox Code Playgroud)

bac*_*dos 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).constant.@name) ret.push(Assets[s]);
        return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1这很酷!也许您可以使用唯一字符串为所有资产名称添加前缀,并将其从常量中过滤掉.@ name - 以防万一在同一个类中声明了其他常量. (2认同)

Cas*_*sey 4

您还可以将资产嵌入到单个 FLA 中。在 FLA 的库中,为每个类指定一个类名称,例如“graphics.menu.RightSquare”,然后将其导出为 SWC。配置 Flash Builder 项目以将 SWC 作为外部库加载。然后你可以做类似的事情:

import graphics.menu.*;

new RightSquare();
Run Code Online (Sandbox Code Playgroud)