快速业务通道

体验Flash MX(7):及时监听对象Listener

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-15

  从Flash 5的时候,我就一直在抱怨为什么enterframe的速度这么固定还这么慢?为什么对于Key对象我还必须去手动建立一个MovieClip来接收事件并触发它?为什么我不能及时准确地接受到我需要的信息呢?亿万个“为什么”总是关于速度和效率的话题,终于Flash MX带来的一个新概念让我得到满足,那就是Listener——及时监听对象。   说起这个对象,其实在很多C语言程序中并不是什么新概念,它主要是作为测试环境中的消息接受器或者是改进程序的效率而存在的,但在Flash MX中恰到好处地出现了。
  Listener对象需要包含调用目标所需要的事件集合,事件集合内可以定义对事件的处理程序,目标函数如果需要Listener对象,必须支持加入Listener的方法。
  在Flash MX中支持Listener的对象有六种:FStyleFormat、Key、Mouse、Selection、Stage和TextField,通过addListener支持Listener。   Key:   在Key对象中的Listener可以获取onKeyDown和onKeyUp时间(当然,也没别的事件可以获取……),一个获取键盘按下和放开的事件监听:   lsn = new Object();   lsn.onKeyDown = function () {trace("down") };   lsn.onKeyUp = function () {trace("up") };   Key.addListener(lsn);   定义Listener的过程很简单,毕竟其本身既是一个对象,并且内部只需要响应事件的集合即可,最后通过支持Listener的方法来得到事件入口并开始触发响应。   Mouse:   Mouse可以给Listener获取的是onMouseDown、onMouseMove、onMouseUp事件,一个获取鼠标事件的例子:   createEmptyMovieClip("mc", 1);   lsn2 = new Object();   lsn2.onMouseUp = function () {trace("mouse up") };   lsn2.onMouseDown = function () {trace("mouse down") };   lsn2.onMouseMove = function () {trace("mouse moving...") };   mc.onMouseUp = function () {trace("movie mouse up") };   mc.onMouseDown = function () {trace("movie mouse down") };   mc.onMouseMove = function () {trace("movie mouse moving...") };   Mouse.addListener(lsn2);   这个例子也比较明了,但说明了一些事情。在有相同事件和Listener都存在的时候,也许你会问到优先级的问题,而也直接涉及到了Listener的生存周期问题。   Listener的概念存在不是为了抢/覆盖原目标程序的事件,是为了测试和提高程序运行效率而存在的,所以在Flash MX中的Listener也是同样,优先级会低于原目标事件的相同事件,而只有当目标的生存期消失或者目标使用了取消监听的方法才是Listener的生存期的重点。直观的可以表达为一个人正在吃饭碰巧一只蚊子在他吃饭的时候才喝你的血液,这个人吃多少它喝多少(大肚蚊子君),但不会影响到这个人正常的生活(知道拍死它或者这个人不小心正常/异常死亡为止)。   Selection:   Selection可以获取的只有onFocus事件。   createTextField("tf",2,100,200,100,20);   tf.text="my design sucks?";   lsn3 = new Object();   lsn3.onSetFocus = function () {trace("focus") };   Selection.addListener(lsn3);   Selection.setFocus(tf);   Selection的Listener只有在该对象获取焦点或者使用setFocus方法的时候才会触发,而这些的必要条件是用户使用鼠标点击了一个文本区(场景内存在一个文本区对象)。   不过如果增加onSelect该有多好……(其实用onMouseUp和getendindex也可以实现)。
  Stage:   Stage的更加简单,只是当场景的大小发生变化(场景缩放)的时候获取onResize事件,前提条件是stage.scalemode=”noscale”且不是ShowAl

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号