事件的侦听器-广播器模型与事件处理函数方法不同,它允许多个代码片断互不冲突地侦听同一事件。
这么说吧,就好像订报纸,我们可以每隔5分钟去看一次报纸到没到,如果您的时间很充裕的话;也可以跟报刊店的老板打声招呼,告诉他报纸到了,就给送来。很明显,后者的效率远高于前者,在flash里面前者就像这样
this.onEnterFrame=function(){
if(paperArrived){
sendme();
}
}
结果就是每一帧都得检验paperArrived是否为true,效率太低,但也能解决问题。
运用事件侦听器-广播器模型,就像这样
var myObj=new Object();
myObj.onPaperArrived=function(){
sendme();
}
me.addListerner(myObj);
只要报纸一到,马上执行sendme();这个程序,高效啊!
下面来看一下demo,这里我没有把stage列入,因为比较偏,平时用到的也不多。
demo
主要代码(这里以mouse为例):
this.createEmptyMovieClip("tmp_mc", this.getNextHighestDepth());
var myMouseobj = new Object();
myMouseobj.onMouseDown = function() {
if (_xmouse>400 && _xmouse<550 && _ymouse>0 && _ymouse<300) {
this.target_mc = tmp_mc.createEmptyMovieClip("", tmp_mc.getNextHighestDepth()-10000);//注意:这里我减了10000,有什么区别大家可以回去试一下
origin_x = _xmouse;
origin_y = _ymouse;
this.Drawing = true;
}
};
myMouseobj.onMouseMove = function() {
if (_xmouse>400 && _xmouse<550 && _ymouse>0 && _ymouse<300) {
if (this.Drawing) {
//this.target_mc.clear();
this.target_mc.lineStyle(1, 0xff0000, 100);
this.target_mc.moveTo(origin_x, origin_y);
this.target_mc.lineTo(_xmouse, _ymouse);
}
updateAfterEvent();
}
};
msleep_btn._visible = false;
myMouseobj.onMouseUp = function() {
this.Drawing = false;
};
mactive_btn.clickHandler = function() {
Mouse.addListener(myMouseobj);
msleep_btn._visible = true;
mactive_btn._visible = false;
};
msleep_btn.clickHandler = function() {
Mouse.removeListener(myMouseobj);
msleep_btn._visible = false;
mactive_btn._visible = true;
};