Actionscript 3 AS3:动态访问外部库符号

Actionscript 3 AS3:动态访问外部库符号,actionscript-3,flash,symbols,Actionscript 3,Flash,Symbols,我正在加载一个包含未实例化MovieClip符号的外部SWF。我可以加载SWF,没问题。如果我打电话: loader.contentLoaderInfo.applicationDomain.getDefinition( "TestClip" ) as Class 我得到一个名为“TestClip”的库符号类,然后我可以实例化它。Jawesome 我遇到的问题是,基本上我希望能够访问所有的库符号,而不需要明确知道它们的名称。我希望使用: describeType( loader.contentL

我正在加载一个包含未实例化MovieClip符号的外部SWF。我可以加载SWF,没问题。如果我打电话:

loader.contentLoaderInfo.applicationDomain.getDefinition( "TestClip" ) as Class
我得到一个名为“TestClip”的库符号类,然后我可以实例化它。Jawesome

我遇到的问题是,基本上我希望能够访问所有的库符号,而不需要明确知道它们的名称。我希望使用:

describeType( loader.contentLoaderInfo.applicationDomain );
…以获得对库符号的反射访问,但返回的XML似乎不包含对它们的任何引用。也许我打错电话了?我也不想为了获得访问权限而显式地创建编码实例。这是一个Flash美工工具,避免使用代码,即使是简单的代码也很重要

一定有办法找到这些符号。任何关于如何实现这一点的建议都将不胜感激

相关:

通过分析SWF的原始ByteArray数据,这两个类似乎都完成了我希望完成的任务。我现在提交这些作为最佳答案,但作为实现这一点的本地方式,仍然是可取的。如果有人能在这里展示这样一种方法,这将得到答案

关于第二个类getDefinitionNamesSource的用法的简要介绍,因为它的实现稍微简单一些

import ru.etcs.utils.getDefinitionNames;
当然,导入类

var classes : Array = getDefinitionNames( displayObject.loaderInfo.bytes );
然后可以调用上面的函数,其中displayObject是任何实例化的
displayObject
,将
loaderInfo
loaderInfo.bytes
传递给它(如果传递给它,该类将从loaderInfo获取字节)。它返回一个类名数组。这个类的优点是它返回未链接的类!这使得它非常适合这个目的!然后,您可以在加载的SWF上使用getDefinition()来获取类,这样您就可以实例化它了!在下面的示例中。加载带有
MovieClip
符号的SWF。在Event.COMPLETE处理程序中,以下代码将其中一个符号实例化为myInstance,此时,您可以执行任何您想要的操作

var MyAsset : Class = loader.contentLoaderInfo.applicationDomain.getDefinition( classes[0] ) as Class;
var myInstance : MovieClip = new MyAsset();