我在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导入实例。
答案 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更容易。