2007年6月11日星期一

多個SWF使用到相同類別時,要注意版本問題

請照以下順序建立檔案:

Test.as

class Test {
public function Test() {
trace("Test()");
}
public function showMsg():Void {
trace("123");
}
}


content1.fla

var test:Test = new Test();
test.showMsg();


輸出 content1.fla --> content1.swf

Test()
123


content2.fla

var test:Test = new Test();
test.showMsg();


修改 Test.as

class Test {
public function Test() {
trace("Test()");
}
public function showMsg():Void {
trace("456");
}
}


輸出 content2.fla --> content2.swf

Test()
456


main.fla

loadMovieNum("content1.swf", 2);
loadMovieNum("content2.swf", 3);


輸出 main.fla --> main.swf

Test()
456
Test()
456


將 Test.as 改回輸出 "123"

class Test {
public function Test() {
trace("Test()");
}
public function showMsg():Void {
trace("123");
}
}


輸出 content1.fla --> content1.swf

Test()
123


輸出 main.fla --> main.swf

Test()
456
Test()
456


簡單來說,若是你有兩個 SWF 都有用到相同的類別,在實際執行時,只有第一次被載入的類別會被運用,因為類別載入後,會成為一個 global 的 function,第二次有別的 SWF 會使用到該類別時,會直接運用。然而,若是開發時,類別有做過異動,使得新載入的 SWF 可能有使用較新的類別檔的話,將會看不到改變後的效果。所以,仍然必須全部有使用到該類別的 SWF 都重新被輸出過才行。

0 意見: