快速业务通道

flash事件模型核心:监听器和广播器

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-10
测到键盘上的一个键是否被按下,然后在被释放的时候,执行这个事件。所以我们可以这样写(直接在时间轴上写,而不是在影片剪辑上写):
Key.addListener(instance_mc);
instance_mc.onKeyUp= function(){
// key up code
}

为什么一个影片剪辑不会在用onClipEvent的时候一样,自动地成为Key对象的一个监听器呢?老实地说,我也不太清楚,我很懒,没有去研究,这也不是这篇文章的目的。一个影片剪辑被默认注册为Mouse对象的监听器,而不是Key对象,这样的话 instance_mc.onMouseUp=function(){...}就可以工作。(虽然这个概念不完全正确,因为影片剪辑监听的事件也不是被Mouse对象广播,而是flash播放器自身广播的,但是你可以这样理解)
尽管如此, 不管什么对象,就像我的影片剪辑对象一样,可以成为一个广播器的监听者。它可以识别一个广播器所广播的事件而产生对应的动作。从上表中我们可以看到flash自定义的广播器有以下几种: Key
Selection
Mouse
Stage
TextField

其中的每一个对象都可以用addListener()方法来给它们添加监听器,使得监听器可以明白它广播的事件。用Selection对象做例子, 有一个onSetFocus事件。这个事件是在flash中焦点变化的时候发生。当一个对象被添加到Selection对象中, 做为它的一个监听器(它可以是任何对象,普通对象,一个影片剪辑或者一个按钮对象),这时这个对象就可以明白在任何时刻Selection对象广播的事件,可以执行onSetFocus函数所分配给它的任何动作。

例1.
让我们来建立一个对象, 使这个对象成为Mouse对象的监听器。这是我上面所说的第一种认识方法的练习,从表面上来认识监听器是怎么工作的。一个监听器是一个用来监听一件事情发生的对象,事件发生了, 它就执行事件中所定义的代码。 aBigEar = new Object(); // 建立一个普通对象

// 定义执行一个任务的函数
Flicked = function(){
trace("Ouch, you just flicked me!");
}

//使得aBigEar成为Mouse对象事件的监听器
Mouse.addListener(aBigEar);

// 分配一个onMouseDown事件给aBigEar
//当aBigEar是Mouse对象的一个监听者
//它就可以像一个影片剪辑那样识别Mouse事件
aBigEar.onMouseDown = Flicked;
你可以把这段代码加入影片当中然后运行。 当你按下鼠标的时候,output窗口就会显示“Ouch, you just flicked me!” 。aBigEar,做为Mouse对象的监听器,当鼠标按下的时候,onMouseDwon所分配给它的函数就会执行,在这里,Flicked函数就会执行, 它包含的一个trace消息也就会显示出来了。
onMouseDown自身,对aBigEar对象来说,仅仅是一个普通的函数。它除了会在flash action编辑器中彩色显示显示之外并没有什么特别的。你可以用aBigEar.onMouseDown()函数轻松地调用这个函数。Mouse 对象,有onMouseDown事件来关联它。因此,当aBigEar被定义为Mouse对象的一个监听器的时候,触发了onMouseDown事件,它就能识别出来,并运行自己定义的onMouseDown函数(在这里就是Flicked函数),这样就可以让你让监听器调用任何你定义的函数。
AS广播器(ASBroadcaster)
我们将拓展监听器的用途,但不是对ASBroadcaster浅尝辄止,而是研究它是怎么实现的。这个对象和监听器对象有非常密切的关系,甚至比你想像的还要密切。每一个上表列出的事件广播器(Key,Mouse,Selection,Stage,TextField)都使用ASBroadcaster在flash场景后面预先定义好了。ASBroadcster使得这些对象可以广播监听器所监听的事件。
ASBroadcaster对象, 不要去把它想得很神秘,其实就是一个普通的有一个初始化方法的类。为了实现广播,它加了三个新的方法和一个新的属性,这样变成了一个新的类。这些方法是:addListener,removeListener,broadcastMessage。还有一个属性是:_listeners. 使用addListener方法可以让你

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号