Какой класс встроен в Flash Builder? - PullRequest
3 голосов
/ 31 мая 2011

Когда вы встраиваете медиа в 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

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Если вы посмотрите документацию (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;

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

0 голосов
/ 31 мая 2011

Когда вы встраиваете ресурс, он становится новым классом в 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>

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

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

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

0 голосов
/ 31 мая 2011

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

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

image.source = listIcon;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...