注意flash4的函數可能引起的bug

flash4的全局函數和類的成員函數是不同的兩個函數。

比如MovieClip的stop...雖然stop();和this.stop();做的事情,產生的結果在大部分時候是一樣的..但是,在一些不經意的地方,就會發生一些意想不到的事情...

比如在用基於prototype的方法,重寫MovieClip的時間軸控制函數,來增加 檢測mc的停放 狀態時,就會出現意外,
andre的代碼註釋裏面提到
just write this.method() instead of method() Old Flash4 methods are in global use and not affected by a prototype changing.

上面這個還是小問題,下面這個就是大問題了~~

在as2中,使用一個繼承MovieClip的子類是很平常的事情,但如果在類中不加this的話,flash player會認爲你使用的是flash4的全局函數,而這樣的函數用在類初始的時候,就會發生意外
// MyMC.as
class MyMC extends MovieClip
{
    static var symbol_linkage:String = "__Packages.MyMC";
    static var symbol_owner:Function = MyMC;
    static var symbol_registerd:Boolean = Object.registerClass(symbol_linkage,symbol_owner);
    public function MyMC ()
    {
        stop();
       //this.stop();
    }
}
// MyClass.as
import MyMC;
class MyClass
{
    private var mymc:MyMC;
    public function MyClass(root:MovieClip)    {
        mymc = MyMC( root.attachMovie("MyMC","mymc", 0) );
    }
}
// test.fla - frame 1
var myclass:MyClass = new MyClass(this);
trace(myclass); // output undefined
(其中MyMC使用了的技巧,查看這裏
也可以用傳統的方法來測試,在libray中建立一個MovieClip Symbol,然後把linkage id和AS2.0 Class設置爲MyMC)

你會發現myclass竟然是undefined...而把MyMC構造函數中的stop();換成this.stop();就沒有問題了...
這就是flash4函數帶來的意外,並且在as2的類中,應儘量避免使用flash4函數的名稱,來命名類的成員.這樣也可能使類成員工作不正常...
flash4的函數可以查看
C:/Documents and Settings/<user name>/Local Settings/Application Data/Macromedia/Flash 8/<language>/Configuration/Classes/toplevel.as
發佈了43 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章