0

我有 2 个使用 Flash Builder 4.6 创建的项目:

  1. 一个 ActionScript 项目
  2. 移动 Flex 项目

这两个项目都加载包含影片剪辑资源的相同外部 SWF 文件(使用 Flash Professional CS6 创建)(使用相同的共享代码加载外部 swf 文件)

这两个项目都扩展了 swf 资产文件中的影片剪辑。例如,在 swf 文件中,我有一个名为“Test”的影片剪辑,其中包含一个文本字段。链接类是“MyTest”,文本字段的实例名称是“txt1”。

我在两个项目中都有一个名为“MyTest”的类,它包含一个公共“txt1”属性和一个私有“var counter:int”,一旦加载了 swf,我使用以下代码创建该类的一个实例:

var x:MyTest = new MyTest();

在 actionscript 项目中,它运行良好并且 x 已正确创建,文本字段 txt1 已正确设置。

然而,在 flex 项目中,txt1 属性为空,因此该实例不是来自外部 swf 的“测试”影片剪辑的实例。

我究竟做错了什么?为什么它在 actionscript 项目中工作而不是在 mobile 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 类型(没有“计数器”属性”,并且 y 将为空(安全案例未成功)。

4

1 回答 1

0

当你说

var y:MyTest = x as MyTest

那么显然这里出了点问题。通过链接 ID 在 swc 中定义的 MyTest 具有编译到 Flex 项目中的 MyTest(通过允许将变量 y 声明为 MyTest 类型的导入语句)没有的“东西”(例如物理图形)知道关于。所以你有两个冲突的类定义,特别是如果它们都有相同的命名空间。

我不希望 y 能够保存从库链接创建的 MyTest 的实例,并且我希望尝试从一个转换到另一个会产生空值 - 正如您所报告的那样。

您最好创建一个 ITest 接口来声明一个 getter/setter 对txt1(顺便说一下,我希望您不要将其用作实际的生产变量名称)。然后演员应该工作得很好。

于 2013-03-03T21:17:53.783 回答