2010-07-16 4 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

Фантастическое решение! Благодаря миллиону, вы действительно избавили меня от большого количества ручной работы [Embed]. –

+0

Сладкий, рад, что это сработало! – Casey

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

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

+0

@Amarghosh: хорошая идея. OTOH, я думаю, было бы разумно разделить активы и фактические константы на отдельные классы. – back2dos

+0

Конечно ... :) – Amarghosh

 Смежные вопросы

  • Нет связанных вопросов^_^