事件的偵聽器-廣播器模型與事件處理函數(shù)方法不同,它允許多個(gè)代碼片斷互不沖突地偵聽同一事件。
這么說吧,就好像訂報(bào)紙,我們可以每隔5分鐘去看一次報(bào)紙到?jīng)]到,如果您的時(shí)間很充裕的話;也可以跟報(bào)刊店的老板打聲招呼,告訴他報(bào)紙到了,就給送來。很明顯,后者的效率遠(yuǎn)高于前者,在flash里面前者就像這樣
this.onEnterFrame=function(){ if(paperArrived){ sendme(); } }
結(jié)果就是每一幀都得檢驗(yàn)paperArrived是否為true,效率太低,但也能解決問題。
運(yùn)用事件偵聽器-廣播器模型,就像這樣
var myObj=new Object(); myObj.onPaperArrived=function(){ sendme(); } me.addListerner(myObj);
只要報(bào)紙一到,馬上執(zhí)行sendme();這個(gè)程序,高效啊!
下面來看一下demo,這里我沒有把stage列入,因?yàn)楸容^偏,平時(shí)用到的也不多。
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,有什么區(qū)別大家可以回去試一下 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
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇Flash專欄版塊參加討論
|