来自导入的swf的As3实例无法识别

时间:2014-07-31 14:03:19

标签: actionscript-3 flash

我在flash编辑器中创建了类似于某个级别的东西。在编辑器中创建了一些继承自项目中的类的类。接下来我导出我的swf以便稍后由我的主代码加载。

问题是,一旦我加载了swf,我会尝试做一些跟踪来检查实例是否是正确的类。

trace(map.getChildAt(i)+" D "+(map.getChildAt(i) as PointerImage));

女巫输出:[object PointerBall] D null。
PointerBall(来自flash)继承自PointerImage(来自我的主代码)。 现在,如果我追踪这个

trace((new PointerBall())+" Y "+(new PointerBall() is PointerImage));

女巫输出:[object PointerBall] Y true

所以问题是从swf导入实例。

2 个答案:

答案 0 :(得分:0)

当我尝试它时,这对我有用。假设您引用的.swf与父项在同一个应用程序域中。关键是让您引用的类位于特定包中。不在包中的类在加载的.swf和父级中都在它们自己的命名空间中。因此,您加载的.swf中的PointerImage与父级中存在的PointerImage不同。这一切都与命名空间有关。

只需将这些类移动到名为game的包文件夹中,然后重命名该包,就应该进行设置。

package game{ 
    import game.PointerImage
    public class PointerBall extends PointerImage{
        //Class code
    }
}

这就是我正在使用的:

function onLoad(evt:Event):void{
    var c:MovieClip = evt.target.content as MovieClip;

    addChild(c);

    var t:BigTest = c.getChildAt(0) as BigTest;
    trace(t);  //[object LitteTest]
}

答案 1 :(得分:-2)

您必须使用LoaderContext并设置要用于覆盖当前类定义或覆盖已加载的swf类的域:

var context:LoaderContext = new LoaderContext(); 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain;
var ldr:Loader = new Loader(); 
ldr.load(urlRequest, context);

使用类继承是可以的,但使用Interface更容易。