| 
 事件的侦听器-广播器模型与事件处理函数方法不同,它允许多个代码片断互不冲突地侦听同一事件。 
这么说吧,就好像订报纸,我们可以每隔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; }; 
源文件下载:addListener.zip 
出处:蓝色理想
 
责任编辑:moby 
◎进入论坛Flash专栏版块参加讨论
	       |