这两天研究了下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结构来简化代码。
没有评论:
发表评论