在我正在構建的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