К какому классу относится встроенный носитель во Flash Builder?

#flash #apache-flex #actionscript

#flash #apache-flex #actionscript

Вопрос:

Когда вы встраиваете носитель во FLash Builder, как показано ниже, он создает класс для ссылки

 [Embed(source="images/list.png")]
protected static const LIST_ICON:Class;
  

Какой класс это создает? И если бы у меня была библиотека swc, которая содержала BitmapData, как бы я в коде создавал такой же класс, используя BitmapData из моего swc?

У меня есть SWC с BitmapData

В моем файле есть XML-файл, который определяет, какое растровое изображение я использую

затем я получаю класс, выполняя

 var ClassReference:Class = getDefinitionByName("ImageData") as Class;
  

«ImageData» является примером для любого текста, который отправляет xml… таким образом, он динамически решает, какой swc-класс извлекать.

После этого мне нужно использовать это для создания класса, который, как я предполагаю, расширяет BitmapAsset, содержащий выбранные BitmapData … таким образом, эмулируя внедрение из первых двух строк выше.

Конечным результатом является то, что у меня есть система, которая вызывает

 getQualifiedClassName(SomeClass)
  

Класс, которому это передается, затем использует

 getDefinitionByName("passedName") 
  

чтобы получить класс и, следовательно, содержащие BitmapData.

Это немного сложно, но я должен сделать это таким образом, чтобы сохранить его динамичным с моей стороны … не могу изменить код, который обрабатывает переданные ему данные. Он должен передаваться по имени

Я надеялся, что это будет проще, но я начинаю думать, что было бы проще встроить все это обычным способом и сделать простой переключатель, который использует другое встраивание в зависимости от того, что говорит XML

Ответ №1:

Если вы ознакомитесь с документацией (http://livedocs.adobe.com/flex/3/html/help.html?content=embed_4.html ) в Embed метаданных показано, что изображение будет встроено с типом mx.core.BitmapAsset (то есть ваш класс LIST_ICON расширяет BitmapAsset).

С поправкой на ваше встраивание код был бы:

 [Embed(source="images/list.png")]
protected static const LIST_ICON:Class;

...

var imgObj:BitmapAsset = new LIST_ICON() as BitmapAsset;
  

Проверьте ссылку выше для получения полного примера кода.

Комментарии:

1. Я добавил более подробную информацию о том, что я пытаюсь сделать

Ответ №2:

Вы можете создать экземпляр вашего изображения с помощью var listIcon:LIST_ICON = new LIST_ICON(); .

и вы можете назначить это источнику изображения как

image.source = listIcon;

Ответ №3:

Когда вы встраиваете ресурс, он становится новым классом в swf. Вам нужно имя этого класса. Это недокументировано (afaik), но вы можете получить его из проанализированного swf. Например, если я возьму свою простую программу TerrainGenerator.as скомпилируйте его и проанализируйте с помощью SWiX, я вижу следующий SymbolClass:

 <SymbolClass>
    <Symbol Tag="0" Name="TerrainGenerator" />
</SymbolClass>
  

Это основной класс, ничего необычного. Далее, если я добавлю Embed следующим образом

 public class TerrainGenerator {
    [Embed(source="SOME_PNG.PNG")]
    public static const IMAGE_RESOURCE:Class;
...
  

Я получу следующее:

 <SymbolClass>
    <Symbol Tag="1" Name="TerrainGenerator_IMAGE_RESOURCE" />
    <Symbol Tag="0" Name="TerrainGenerator" />
</SymbolClass>
  

И если я перемещу это встроенное в класс resource в package somepackage , это станет:

  <Symbol Tag="1" Name="somepackage.resource_IMAGE_RESOURCE" />
  

Итак, существуют правила для генерации имен этих классов, и мы можем изучить их с помощью swf parser.