在我正在构建的Flash应用程序中,我有一个将加载各种“子”SWF的“主”SWF文件。
所有用于主SWF和子SWF的AS3代码均包含在外部.as类文件中。
换句话说,每部电影都有它自己的文档类.as文件。
对于所有常见元素(e..g,UI按钮和控件),还有许多.as类文件。因此 - 例如 - 我的主SWF和所有子SWF都使用“MyCommandButton”类;此类的代码位于MyCommandButton.as中,所有SWF参考(导入)。
这是我不明白。
(比方说,在MyCommandButton.as的代码绘制是红色按钮。)
首先,我编译子SWF文件的ALL。
接下来,我改变MyCommandButton.as,以便它绘制按钮蓝色,而不是红色。
然后,我编译了主SWF。
当我运行的应用程序(main.swf中),我会预计所有主SWF的按钮是蓝色(因为那个时候的main.swf编译什么MyCommandButton.as规定),以及所有子SWF文件的按钮将红色(因为这时候他们被编译什么MyCommandButton.as指定)。
相反,按钮ALL是蓝色的,这意味着我所做的更改MyCommandButton.as影响了所有子SWF,即使我没有重新编译它们。
这是为什么?有没有简单的解释为什么会发生这种情况?
非常感谢提前!
这是一个*真棒*答案 - 感谢,meddlingwithfire!这也很有趣 - 我从黑客角度理解,为什么一个加载的(子)SWF不应该能够重写父类的类。但是,我错误地认为每个SWF都是独立的。因此 - 父级可以具有其“classA”版本,并且加载的SWF可以具有其自己的(不同)版本的“classA”。事实上,它的运作方式是一个非常显着的好处。我认为,在确定子SWF是否引用相同的类定义时,它会使用完整的名称空间? – mattstuehler
每个SWF都非常独立 - 正如您通过自己运行每个SWF所看到的那样。当您开始将SWF加载到其他SWF中时,只会添加一些额外的安全规则。更正名称空间 - 检查类时会考虑类名称空间。所以,父母可以在默认名称空间中定义“MyCommandButton”,孩子可以定义“child.MyCommandButton”,并且不会有冲突。另外 - 如果您接受此答案,请将其标记为答案。 :) – meddlingwithfire