【问题标题】:AS3: Accessing External Library Symbols DynamicallyAS3:动态访问外部库符号
【发布时间】:2011-03-29 23:20:51
【问题描述】:

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

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

我得到了一个名为“TestClip”的库符号类,然后我可以对其进行实例化。 真棒

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

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

【问题讨论】:

    标签: actionscript-3 flash symbols


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 2010-11-23
      • 1970-01-01
      • 2010-12-28
      • 2016-06-28
      • 2011-12-13
      • 2016-12-17
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多