Вставить много графики, используя массив - PullRequest
5 голосов
/ 16 июля 2010

В AS3 вы можете встроить графику в переменную Class:

     [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")],
        ]

Ответы [ 3 ]

5 голосов
/ 16 июля 2010

Боюсь, ты не сможешь.Что вы могли бы сделать, это:

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;
    }
}
4 голосов
/ 17 июля 2010

Вы также можете встроить активы в один FLA.В библиотеке FLA присвойте каждому имя класса, например «graphics.menu.RightSquare», затем экспортируйте его как SWC.Настройте проект Flash Builder для загрузки SWC в качестве внешней библиотеки.Тогда вы можете сделать что-то вроде:

import graphics.menu.*;

new RightSquare();
4 голосов
/ 16 июля 2010

Как правило, теги метаданных в Flex применяются к переменной уровня класса.

Вы должны использовать тег метаданных [Embed] перед определением переменной, где переменная имеет тип 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];
...