4/19/2008

组织Flash脚本

这两天研究了下Flash的ActionScript,与javascript同源,语法比较相似。不过as脚本往往分散到各个剪辑,层或者帧里面。很难阅读。所以研究了下如何组织flash脚本。 最好是能够单独建立一个只有一帧脚本层,将脚本全部写在这里。甚至是在这一帧中仅仅写一个包含语句,脚本全部写在一个外部文件中。

#include "E://www/tmp/fanpai.as"

分散的脚本组织起来需要注意的事件处理的对象,以及变量的作用范围。

对于按钮使用 objname.onRelease = function(){}

特定帧的代码经常需要使用到onEnterFrame事件。

_root.onEnterFrame = function(){
    switch(this._currentframe){
        case 1:
            todo;
            break;
        case 20;
            todo;
            break;
        default:
            break;
    }
}
但是onEnterFrame的使用经常可能导致内存泄露。因此使用完了常常需要delete。这就需要给一个事件增加多个侦听函数。可以如下面这样做
    onEnterFrame = function(){
        for(var i:String in frameListener){
            (frameListener[i])();
        }
    }
    var frameListener = { fun1:function(){
        if(_root.getbytesloaded() >= _root.getbytestotal()) {
            delete framelistener['fun1'];
            loadMc(0);
        }}
    }
需要的时候往frameListener中加入或删除侦听函数。

在ActionScript 3.0中还有更加惬意的方式。 import mx.events.EventDispatcher; EventDispatcher.initialize(MovieClip.prototype); var myListener:Object = new Object(); myListener.release = function (evt:Object) { trace(evt.target); } aaa.onRelease = bbb.onRelease = function () { this.dispatchEvent({target:this, type:"release"}); } aaa.addEventListener("release", myListener); bbb.addEventListener("release", myListener);

另外必须注意的的是一些 _root,this,_parent等的处理。这些变量都在某种意义上属于相对路径的范畴。代码更换了位置后,必须重新调整这些代码来保证所指的路径和对象一致。 需要的时候使用with结构来简化代码。

没有评论: