AS2中的侦听器
事件侦听器基础
动作脚本事件处理函数共有两类:事件处理函数方法和事件侦听器,要明白事件侦听器的概念,必须首先理解线性编程和事件驱动编程的区别; 一编程方法比较
(1)以时间为基础编程类似于观察一壶水是否被烧开,要想知道水是否被烧开了,需要不断的去进行观察,事实上过去我们的却是这样做的;
例如;影片剪辑man代表人,影片剪辑waterbottle代表水壶;变量temperature代表温度;当水温等于100度时人就可以把水拿走了;写成程序放在根时间轴第一帧上如下; this.man.onEnterFrame=function () { if (waterbottle.temperature==100) { this.man.takewater(); } }
以上影片剪辑man不断的监视着影片剪辑waterbottle上的一个变temperature,当着个变量等于100时就可以把水拿走了;
(2)事件驱动编程;事件驱动编程的概念正好相反,过去的被监视者现在必须变成消息的发送者,现在的很多水壶都有一个峰鸣器,当水开了后会发出叫声,影片剪辑man不需要对水进行不断的监视了,只要峰鸣器(广播器)发出叫声(广播),监视者(侦听器)就可以收到那个广播,然后就去把水拿走;要使man可以收听waterbottle的叫声,必需把影片剪辑man注册成waterbottle事件的侦听对象;
//为广播器对象waterbottle注册一个侦听器对象man; this.waterbottle.addListener(this.man);
这样当水开了后waterbottle就会向注册对象man发出通知--水开了;收到通知后影片剪辑man就去把水拿走; //定义事件处理函数方法;
this.man.onwaterbottletemperature=function (ss) { this.man.takewater(ss); }
二 事件侦听器模型 单词含义;
listenerObject//侦听器对象(收听者); broadcastObject//广播器对象(广播者); 标准模型
侦听器对象.事件名称=function(){...} 广播器对象.addListener(侦听器对象); 即;
listenerObject.eventName = function(){...}; broadcastObject.addListener(listenerObject); 说明
侦听器对象listenerObject可以是任何对象,例如舞台上的影片剪辑或按钮实例,或者可以是任何动作脚本类的实例。
eventName事件名称是在 broadCastObject 上发生的事件,然后将该事件广播到listenerObject。可以向一个事件广播器注册多个侦听器。 示例1
//创建侦听器对象k; k= new Object(); /*
为侦听器k构造事件处理函数,当收到了广播器对象Mouse发出的onMouseDown广播时,执行函数体;
主意;onMouseDown事件是在广播器对象Mouse上发生的,事件发生后广播器Mouse会把这个事件广播到侦听 器k上; */;
k.onMouseDown = function() { _root.my_mc.stop(); };
//设置广播器对象;
//在广播器对象Mouse上注册侦听器对象k;用于接收 onMouseDown回调处理函数的通知。
Mouse.addListener(k); 示例2
向一个广播器注册两个侦听器对象 //创建两个侦听器对象k1,k2; k1= new Object(); k2= new Object(); /*
为侦听器k1,k2构造事件处理函数,当收到了广播器对象Mouse发出的onMouseDown和onMouseUp广播时,分别执行各自的函数体;主意;onMouseDown和onMouseUp事件是在广播器对象Mouse上发生的,事件发生后广播器Mouse会把这个事件广播到侦听器k1,k2上; */;
k1.onMouseDown = function() { _root.my_mc.stop(); }; //...;
k2.onMouseUp = function() { _root.my_mc.play(); }
//设置广播器对象;
//在广播器对象Mouse上注册侦听器对象k1;用于接收 onMouseDown回调处理函数的通知。
Mouse.addListener(k1); //........;
Mouse.addListener(k2); 示例3
影片剪辑作为广播器,为一个侦听器广播三个事件; //构造一个侦听器对象; obj=new Object();
obj.onMouseDown=function () { _root.mc.my_txt.text=\"鼠标按下\"; }
obj.onMouseUp=function () { _root.mc.a=\"鼠标释放\"; }
obj.onMouseMove=function () { _root.mc.a=\"鼠标移动\"; }
onClipEvent (load) {
Mouse.addListener(this._parent.obj); } 示例4
//构造一个侦听器对象;
obj=new Object(); //为一个侦听器广播2个事件; obj.onMouseDown=function () { _root.mc1.stop(); }
obj.onMouseUp=function () { _root.mc1.play();
} //广播器对象Mouse把obj注册为侦听器; Mouse.addListener(this.obj); 示例5
比较侦听器与函数控制 (1)
onClipEvent (mouseDown) { stop();
} onClipEvent (mouseUp) { play(); } (2)
this.mc2.onMouseDown=function () { this.stop(); }
this.mc2.onMouseUp=function () { this.play(); } (3) //
Obj= new Object(); myObj= new Object(); //
Obj.onMouseDown = function() { _root.mc3.stop(); };
myObj.onMouseUp = function() { _root.mc3.play(); } //
Mouse.addListener(Obj);
//........;
Mouse.addListener(myObj); 示例6
以下示例创建一个新的侦听器对象,并为 onKeyDown 和 onKeyUp 定义一个函数 。最后一行使用 addListener() 向 Key 对象注册该侦听器,以使该对象可接收 按下和释放按键事件的通知。 myListener = new Object();
myListener.onKeyDown = function () { trace (\"KeyDown\"); atxt=\"键盘按下\";
} myListener.onKeyUp = function () { trace (\"KeyUp\"); atxt=\"键盘释放\";
} Key.addListener(myListener); 示例7
onChanged事件处理函数在文本字段的内容更改时调用。使用 txt 作为传递给 onChanged 事件处理函数的参数 在影片剪辑时间轴第一帧写; stop();
this.onChanged=function (txt) { this.play(); //trace(txt); a=txt+\"被更改\"; }
this._parent.my_txt.addListener(this) this._parent.youer_txt.addListener(this) 源文件下载
点击浏览该文件
[此贴子已经被作者于2005-12-27 11:39:04编辑过]
--------------------------------------------------------------------------------
-- 作者:清柔
-- 发布时间:2005-12-27 11:42:27 -- 自定侦听器 侦听器2--自定义
如许转载请注明出处与作者 作者;龙卡 闪课起航论坛原创
在flash 2004中有一个隐藏对象叫;AsBroadcaster对象,这个对象在flash mx中为ASBroadcaster; 利用它我们可以自定义侦听器; AsBroadcaster对象的使用方法为; AsBroadcaster.initialize(确定广播器); AsBroadcaster.addListener(注册侦听器); AsBroadcaster.removeListener(删除侦听器); AsBroadcaster.broadcastMessage(广播); 示例1
据传在周朝时代江子牙还未下山前,母鸡下蛋后是不会发出\"咯咯\"叫声的,江子牙的师父很喜欢吃新鲜鸡蛋,为了在第一时间得到鲜蛋,江子牙需要经常去观察母鸡是否下了蛋;如果下蛋了就及时拿走,流程图如下所示; .--> 母鸡下蛋----是----->拿走 | . | . 继续观察 否 . . ._ _ __.
假定影片剪辑my_egg代表鸡蛋,影片剪辑my_mc代表江子牙,可以把这个过程编成程序; 示例1线性编程 在my_egg上写; onClipEvent (load) { this._alpha=0;
} onClipEvent (enterFrame) { if (this._alpha<100) { this._alpha+=1; } }
在my_mc时间轴第一帧写 stop();
this.onEnterFrame=function () {
if (this._parent.my_egg._alpha>=100) {//不断监视my_egg的_alpha值 gotoAndStop(2); } } 示例2
继上例话题,有一次江子牙正要wc时看见母鸡进窝,就暂停wc了,心想这次可以拿到最鲜的蛋了,没想到的是等了好长时间,不见母鸡出来,实在等不及了,就先去方便,恰巧母鸡这时出来了,等方便完,鲜蛋也不热乎了,可把江子牙气坏了,这母鸡专门和我作对,抽出打神鞭啪的一声打在这个母鸡身上,母鸡\"咯咯\"的叫着逃跑了,从此母鸡下完蛋就会发出\"咯咯\"叫声,这却让江子牙受益非浅;不用总是去监视,只要听到叫声就去拿蛋; 我们把江子牙根据母鸡叫声拿蛋写成程序的思考过程分析如下;
1母鸡下完蛋必须要发出\"咯咯\"叫声,即母鸡是一个事件源,事件发生后,就发出广播,通知主人下蛋了;在flash中事件源叫---广播器;要使一个影片剪辑成为广播器必须使用AsBroadcaster.initialize进行定义; //将my_egg定义成广播器;
AsBroadcaster.initialize(_root.my_egg);
2上面的程序确定了母鸡下了蛋就会广播,这个广播的信息是发给江子牙的,要是江子牙能够接收这个信息,必须把江子牙注册成--侦听器; //注册my_mc为my_egg的帧听器对象; _root.my_egg.addListener(_root.my_mc); 3 //为侦听器my_mc创建接收广播器对象的函数, //当收到广播时确定侦听器要执行的动作; _root.my_mc.egg=function () { _root.my_mc.gotoAndStop(2); } 4
//初始化广播器内的变量; _root.my_egg._alpha=0; //制定广播器发出广播的条件; this.onEnterFrame=function () { //制定my_egg生成的条件;
if (_root.my_egg._alpha<100) { //my_egg从无到有变化,最后完全可见; _root.my_egg._alpha+=1; //my_egg完全可见了,就开始广播;
} else if (_root.my_egg._alpha>=100) { //广播一条信息\"egg\";
ss= _root.my_egg.broadcastMessage(\"egg\"); trace(ss); //删除函数,释放内存;
delete this.onEnterFrame; } }
示例3
在看看我们开始提到的例子;
现在的很多水壶都有一个峰鸣器,当水开了后会发出叫声,只要峰鸣器(广播器)发出叫声(广播),监视者(侦听器)就可以收到那个广播,然后就去把水拿走;要使man可以收听waterbottle的叫声,必需把影片剪辑man注册成waterbottle事件的侦听对象; //创建对象水壶;
waterbottle = new Object(); //将对象waterbottle作为广播器; AsBroadcaster.initialize(waterbottle); //创建对象男人; man = new Object(); //定义事件处理函数方法;
man.boiled_water = function(ss) { trace(ss); };
//注册man为侦听器;
waterbottle.addListener(man); //水开后进行广播;
waterbottle.broadcastMessage(\"boiled_water\\"我把水拿走了\");
因篇幅问题不能全部显示,请点此查看更多更全内容