AS3: динамический доступ к символам внешней библиотеки - PullRequest
0 голосов
/ 15 августа 2010

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

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

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

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

describeType( loader.contentLoaderInfo.applicationDomain );

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

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

Связанный:

as3 - получение библиотечных символов из класса активов

AS3 - получение символов из библиотеки ресурсов БЕЗ Flex

Flash AS3: addChild () не отображает импортированный видеоклип

1 Ответ

1 голос
/ 15 августа 2010

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();
...