2010-08-14 2 views
0

Я загружаю внешний SWF, содержащий неподготовленные символы MovieClip. Я могу загрузить SWF без проблем. Если я позвоню:AS3: Доступ к внешним библиотечным символам динамически

loader.contentLoaderInfo.applicationDomain.getDefinition("TestClip") as Class 

Я получаю класс библиотечного символа называется «TestClip», который я могу затем создать экземпляр. Jawesome.

Проблема, с которой я сталкиваюсь, заключается в том, что в основном я хочу иметь доступ ко всем символам библиотеки, не требуя явно знать их имена. Я надеялся использовать:

describeType(loader.contentLoaderInfo.applicationDomain); 

... чтобы получить отражающий доступ к символам библиотеки, но XML возвращается, кажется, не включает в себя какие-либо ссылки на них. Возможно, я называю это неправильным объектом? Я также не хочу явно создавать закодированные экземпляры для получения доступа. Это инструмент для Flash-исполнителей, и важно избегать кода, даже простого кода.

Должно быть каким-то образом получить доступ к символам. Любые предложения о том, как это сделать, будут оценены!

Связанный:

as3 - getting library symbols from an Assets class

AS3 - getting symbols from an assets library WITHOUT Flex

Flash AS3 : addChild() does not display imported movieclip

ответ

1

http://www.bytearray.org/?p=175

http://etcs.ru/pre/getDefinitionNamesSource/

Оба этих класса, похоже, выполняют то, что я ищу, анализируя необработанные данные ByteArray в SWF. Я представляю их как лучший ответ на данный момент, но по-прежнему желателен, чтобы сделать это. Это даст ответ, если кто-то может показать такой метод здесь.

Быстрое сокращение использования второго класса, getDefinitionNamesSource, поскольку его немного проще реализовать.

import ru.etcs.utils.getDefinitionNames; 

Конечно, импортируйте класс.

var classes : Array = getDefinitionNames(displayObject.loaderInfo.bytes); 

Тогда вы можете вызвать выше, где DisplayObject любая инстанцирован DisplayObject, передавая его либо loaderInfo или loaderInfo.bytes (класс получит байты из LoaderInfo, если это то, что вы передаете его). Он возвращает массив имен классов. Самое приятное в этом классе заключается в том, что он возвращает несвязанные классы! Это делает его идеальным для этой цели! Затем вы можете использовать getDefinition() в загруженном SWF, чтобы получить класс, чтобы вы могли его создать! В следующем примере. Загружается SWF с MovieClip символами. В обработчике Event.COMPLETE следующий код будет создавать один из этих символов как myInstance, после чего вы можете делать все, что хотите.

var MyAsset : Class = loader.contentLoaderInfo.applicationDomain.getDefinition(classes[0]) as Class; 
var myInstance : MovieClip = new MyAsset(); 
Смежные вопросы