AS3:如何从外部.as类文件编译SWF?

时间:2011-10-05 17:54:40

标签: flash actionscript-3

所有

在我正在构建的Flash应用程序中,我有一个“主”SWF,它将加载各种“子”SWF。

主SW​​F和子SWF的所有AS3代码都包含在外部.as类文件中。

换句话说,每部电影都有自己的文档类.as文件。

对于所有常见元素(例如,UI按钮和控件),还有许多.as类文件。

所以 - 例如 - 我的主SWF和所有子SWF都使用“MyCommandButton”类;此类的代码位于MyCommandButton.as中,所有SWF都引用(导入)。

这是我不明白的地方。

假设MyCommandButton.as中的代码绘制了红色的按钮。

首先,我编译子SWF的所有

下一步,我更改了MyCommandButton.as,因此它绘制的按钮是蓝色,而不是红色。

然后,我编译主SWF。

当我运行app(main.swf)时,我期望主SWF中的所有按钮都是 blue (因为这就是MyCommandButton.as指定的内容)当编译main.swf时,子SWF中的所有按钮都将红色(因为这是他们编译时MyCommandButton.as所指定的。)

相反,所有按钮都是蓝色,这意味着我对MyCommandButton.as所做的更改会影响所有子SWF,即使我没有重新编译它们。

这是为什么?对于为什么会发生这种情况有一个简单的解释吗?

非常感谢提前!

1 个答案:

答案 0 :(得分:4)

这是由于Flash处理加载字节代码的方式。具体来说,请查看ApplicationDomain文档。

  

除系统域外,每个应用程序域都有一个关联的父域。主应用程序的应用程序域的父域是系统域。加载的类仅在其父级尚未定义它们时定义。您不能使用较新的定义覆盖已加载的类定义。

请注意“仅当父级尚未定义它们时才定义已加载的类”部分。子SWF中的MyCommandButton类已存在于主SWF(父ApplicationFmain)中,因此未使用。

这对于防止黑客行为尤为重要。想想如果你可以将你的SWF注入别人的动态应用程序并开始重写所有课程的可能性。

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e07.html

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ApplicationDomain.html