事件的侦听器-广播器模型与事件处理函数方法不同,它允许多个代码片断互不冲突地侦听同一事件。
这么说吧,就好像订报纸,我们可以每隔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专栏版块参加讨论
|