我正在加载包含未实例化的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
答案 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
,传递给它loaderInfo
或loaderInfo.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();