我有两个使用Flash Builder 4.6创建的项目:
这两个项目都加载了包含影片剪辑资源的相同外部SWF文件(使用flash专业版CS6创建)(使用相同的共享代码加载外部swf文件)
两个项目都扩展了swf资产文件中的影片剪辑。 例如,在swf文件中,我有一个名为“Test”的影片剪辑,其中包含一个文本字段。链接类是“MyTest”,文本字段的实例名称是“txt1”。
我在两个项目中都有一个名为“MyTest”的类,它包含一个公共“txt1”属性和一个私有的“var counter:int”,一旦加载了swf,我使用以下代码创建一个类的实例:
var x:MyTest = new MyTest();
在actionscript项目中它工作得很好并且正确创建了x,文本字段txt1设置正确。
但是,在flex项目中,txt1属性为null,因此该实例不是来自外部swf的“Test”影片剪辑的实例。 我做错了什么?为什么它在actionscript项目中而不是在移动flex项目中工作? 这是完成所有这些工作的共享代码,我不想仅为flex项目重写一个新代码......感谢。
让事情更清晰
这段代码:
var cls:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("MyTest") as Class;
var x:Object = new cls();
trace(getQualifiedClassName(x));
var y:MyTest = x as MyTest;
将x设置为swf中定义的MyTest类型(没有“counter”属性“,y将为null(安全案例未成功)。
答案 0 :(得分:0)
当你说
时 var y:MyTest = x as MyTest
然后显然这里出了点问题。通过链接ID在swc中定义的MyTest具有“stuff”(例如物理图形),即编译到Flex项目中的MyTest(通过允许变量y声明为类型的import语句) MyTest)不知道。因此,您有两个冲突的类定义,特别是如果它们都具有相同的名称空间。
我不希望y能够保存从库链接创建的MyTest的实例,并且我希望尝试从一个转换到另一个会使得null - 就像你报告的那样。
您最好创建一个ITest接口,为txt1
声明一个getter / setter对(顺便说一句,我希望您不会将其用作实际的生产变量名)。然后演员应该工作得很好。