AS3:动态访问外部库符号

时间:2010-08-14 23:39:38

标签: actionscript-3 flash symbols

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

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

我得到一个名为“TestClip”的库符号类,然后我可以实例化它。 Jawesome

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

describeType( loader.contentLoaderInfo.applicationDomain );

...获得对Library符号的反射访问,但返回的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 个答案:

答案 0 :(得分:1)

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

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

这两个类似乎通过分析SWF的原始ByteArray数据来完成我想要做的事情。我现在提交这些作为最佳答案,但是仍然需要本地方法来实现这一目标。如果有人能在这里展示这样的方法,那将得到答案。

快速了解第二类getDefinitionNamesSource的用法,因为它实现起来有点简单。

import ru.etcs.utils.getDefinitionNames;

当然,导入课程。

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

然后你可以调用上面的 displayObject 是任何实例化的DisplayObject,传递给它loaderInfoloaderInfo.bytes(该类将得到字节来自于loaderInfo,如果你传递它的话)。它返回一个类名数组。这个类的好处是它返回未链接的类!这使它成为这个目的的理想选择!然后,您可以在加载的SWF上使用getDefinition()来获取Class,以便您可以实例化它!在以下示例中。加载带有MovieClip符号的SWF。在Event.COMPLETE处理程序中,以下代码将其中一个符号实例化为 myInstance ,此时,您可以执行任何操作。

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