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

来源:互联网 发布:淘宝网频现违规刀具 编辑:程序博客网 时间:2024/05/17 06:22
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