如果不存在AS3,如何从编译中排除库项目

时间:2017-09-12 05:47:26

标签: actionscript-3 flash

我在库中有一个MovieClip,我通过addChild方法动态加载。

我面临的问题是: -

我有一个Main Class,它与其他几个类和几个FLA一起运行。

Main Class调用一个子类函数,该函数反过来调用FLA框架中的代码,该框架从库中加载该对象。

此对象并非存在于所有FLA 中,这就是我遇到困难,导致编译时间错误。

尝试通过此检查但失败了:(

var classExist:Boolean = isClassExists(“CTRL_ALARM”);

function isClassExists(className:String,domain:ApplicationDomain = null):Boolean {     var res:Boolean;

if(domain)
{
    res = domain.hasDefinition(className);
}
else
{
   // res = getDefinitionByName(className);
    //or the same
   res = ApplicationDomain.currentDomain.hasDefinition(className);
}
trace(res);
return res;

}

有没有办法可以在as3中复制Stage上的对象,或者如果对象不存在于库中,如何限制编译对象?

1 个答案:

答案 0 :(得分:0)

尝试以下方法。如果所有SWF都在同一个沙箱中,它可能会起作用:

import flash.utils.getDefinitionByName;

var AlarmClass:Class = getDefinitionByName("CTRL_ALARM");
var anAlarm:DisplayObject = new AlarmClass;

然后,为了使其在沙箱限制下工作,您可以通过加载的SWF寻找您想要的定义:

// This should contain Loader objects with your loaded SWFs.
var aList:Array;

for each (aLoader:Loader in aList)
{
    // Get reference to loaded app domain.
    var aDomain:ApplicationDomain = aLoader.contentLoaderInfo.applicationDomain;

    // Check if such a class is in that SWF.
    if (aDomain.hasDefinition("CTRL_ALARM"))
    {
        var AlarmClass:Class = aDomain.getDefinition("CTRL_ALARM");
        var anAlarm:DisplayObject = new AlarmClass;

        break;
    }
}