AS3从外部swf库加载符号

时间:2011-05-31 14:02:50

标签: flash actionscript-3

我有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来解决这个问题,或者我有其他选择吗?

3 个答案:

答案 0 :(得分:2)

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

这是一个可能有用的代码段:

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

答案 1 :(得分:2)

请按照以下步骤操作

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

    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;
    }
    

答案 2 :(得分:0)

您需要拥有一个as3类,或者只是在框架中导出符号,否则您无法引用它。如果你不导出你的动画片段,你的swf将是空的...基本上你可以将它导出为某个类,然后引用空类!