【发布时间】:2014-10-01 14:14:08
【问题描述】:
我正在制作一个游戏,其中每个屏幕都作为单独的 swf 加载。我正在使用 Greensock 的 LoaderMax 加载 swf,但我认为这不是导致问题的原因。加载 swf 后,我可以设置子 swf 的属性,例如 String 和 MovieClip。但是,我在库路径中有一个第三方库,两个项目的 swc 完全相同。但是,当我尝试传递非系统变量时,它会给出一个错误,基本上是“强制失败:无法将 ThisType 转换为 ThisType”。如果它们是相同的数据类型,为什么编译器要强制它们?我一定是在这里遗漏了什么......
错误:
TypeError: Error #1034: Type Coercion failed: cannot convert package::ThisType@7ffecfe4ba1 to package.ThisType.
at mJackStateMachine/onAskForClient()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
这是(简化的)完整处理程序。当我尝试在 swfs 之间传递 ThisType 类型的 var a_thisTypeVar 时,它会中断:
function CompleteHandler(e:LoaderEvent) {
childSwf = LoaderMax.getContent("LoginStateSwf").rawContent;
stage.addChild(childSwf);
childSwf.start(_thisTypeVar)
}
请帮忙!如何在 swf 之间传递来自第三方库的 var。我应该可以做到吧?
【问题讨论】:
-
我认为可能发生的情况是加载的(辅助)SWF 不知道 ThisType 对象类型是什么。这意味着您有一个主 SWF 已知的类型,但加载的(辅助)SWF 不知道该类型。 ThisType 扩展了什么?查看 _thisTypeVar 设置的内容以及 ThisType 通常是什么内容会很有帮助。
-
ThisType 是 playerio.Client,都是 swf 的 import 这个类,并且在构建路径中有相同的 playerio.swc
-
您是如何构建 SWF 的?如果 playerio.swc 包含在两个 SWF 中,您将有两个相互竞争的 ThisType 定义。将 SWC 作为运行时共享库包含在子 SWF 中可能会解决此问题。
-
嗨,布莱恩。我正在编译来自 flash 专业版的 swf,但所有代码都是在 flash builder 中编写的。 RSL 不适合我,因为我使用的是 flash 播放器,而不是 flex。
-
您将 swc 包含在相同的类中两次。这似乎是问题所在。您可能需要规划流程,以免 swc 被调用 2 次或更多次。
标签: actionscript-3 flash swfloader coercion type-coercion