【问题标题】:AS3 load symbol from external swf libraryAS3 从外部 swf 库加载符号
【发布时间】:2011-09-05 12:52:15
【问题描述】:

我有 2 个 SWF,其中一个(我们称之为 Resources.swf),在其库中包含多个符号(大部分是 MovieClip),但是,它们都没有添加到舞台中(时间轴只包含一个空框), 然后是另一个 swf (Main.swf),我需要从另一个 SWF 导入一些符号。

我一直在四处寻找和搜索,但我看到并尝试过的所有信息都使用以下内容从舞台/时间线导入符号:

loadedMC = MovieClip(loader.content);

loadedMC = MovieClip(event.target.content);

我的符号有一个类定义,因为它们也以这种方式在其他 swf 中使用:

[Embed(source='assets/Resources.swf', symbol='SymbolName')]
public class Generic2 extends MovieClip

有什么办法吗?

如果没有,我是否修改了我的 Resources.swf 来解决这个问题,或者我有其他替代方案吗?

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    加载 Resources.swf 后,您可以创建加载类的实例。

    这里有一个可能有帮助的 sn-p:

    var dynClass : Class = Class(getDefinitionByName("fully.qualified.ClassName"));
    if(dynClass) 
    {
        var app : Object = new dynClass();
        addChild(app as DisplayObject);
    }
    

    【讨论】:

    • 如果没有与此对象关联的 as3 类,这是否有效?如果我的类名只是 MyClassName,那将是它的完全限定名?
    • 不,我必须在库对象上有一个类定义(你写道:'我的符号有一个类定义')。是的,如果你不使用命名空间,类名就足够了。
    【解决方案2】:

    您需要有一个 as3 类,或者只是在框架中导出符号,否则您无法引用它。如果您不导出影片剪辑,您的 swf 将为空...基本上您可以将其导出为特定类,然后引用空类!

    【讨论】:

      【解决方案3】:

      按照这些步骤进行

      1. 在 Flash 中,通过为库项目调出“属性”并选中“Export for ActionScript”并为其指定“类”名称来标记要导出的类。
      2. 发布 Resources.SWF
      3. 加载 Resources.SWF 后,您可以使用此帮助函数创建实例
      4. 然后您可以 addChild() 或任何您想要的实例。

      辅助函数

      public function createInstance(mc:MovieClip, className:String, instName:String):MovieClip
      {
          var cls:Class = mc.loaderInfo.applicationDomain.getDefinition(className) as Class;
          if (cls)
          {
              var instMC:MovieClip = new cls();
              instMC.name = instName;
              return instMC;
          }
          return null;
      }
      

      【讨论】:

        最近更新 更多