设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源分享平台

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

来源:136z.Com 作者:佚名 时间:2005-09-09 00:52:22

这对一些想深入了解Flash MX运行机制,想进步的AS爱好者来说是非常重要的。
我在各个Flash网站上搜寻了一下,有两篇比较好的文章,我先翻译其中的一篇给大家作为参考。I sorry that I am shit in English.


Listeners(监听器)和ASBroadcaster(AS广播器)
Author: Santiago Esperanza
translater: AOL
版本:Flash MX
级别:中级
来源:www.Flashguru.co.uk
介绍
用监听的方法是在Flash MX中才出现的概念。监听器顾名思义, 就是一个用来监听特定事件的发生情况的对象。如果你对actionscript非常熟悉的话,你肯定多次用到过监听器,但是你可能不知道它们。从技术上说,从Flash 5以来所有的影片剪辑,都是监听器;所有的按钮也都是如此。这些Flash对象都是用来监听一个事件, 当这个事件发生了,它就执行一段语句。但是在Flash MX以前, 它们是怎么样的呢?这个东西也不是什么新事物了, 只是直到Flash 版本为MX的时候actionscript语言才让我们完全地运用监听器而已。
进一步的认识
学习监听器, 从按钮开始是一个不错的方法。按钮给我们的整个概念就是非常具有代表性的交互功能。当你按下一个按钮的时候,一个你所期待的结果就会发生。确定这些事情是不是发生了, 这是按钮为达到与用户交互的工作。当按下一个按钮的事件被检测到或者这个事件是由Flash播放器发送出去的,在按钮上的on(press)事件和里面的代码就会执行。还有一些按钮监听的事件, 比如说释放(release),滑上(rollOver),等等。而Flash的影片剪辑也有类似的为一些事件如enterFrame,mouseMove,keyDown等探测的监听器。
在Flash MX以前, 这些监听器(按钮和影片剪辑)都是预先定义好了的,而且它们是不能改变的,我们用户是没有人能够定义别的类型的监听器的。所有的这些都在Flash运用新的事件模型后彻底改变了。按钮和影片剪辑仍然是预先定义好了的,但是现在你可以定义你自己的为某些你特指的事件的监听器,就像被公认了的按钮和影片剪辑一样的事件监听器。当然你所定义的监听器不仅仅可以对像keyDown或者mouseMove这样的事件进行监听。你可以用ASBroadcaster(Action script广播器)来定义你要监听的事件。
Flash内建的监听事件类型和广播器是怎么样的呢,请看下表。
按此在新窗口浏览图片
你会注意到不是所有的事件, 比如说 onDragOut,都和一件广播器有关联。你可以想象它们是被Flash播放器广播的, 而不是通过一个具体的Flash actionscript对象。这些事件被限定只能用于列表中对应的监听器。用onDragout来说,它只能用于按钮或者影片剪辑对象。当一件事情被初始化的时候,你就可以广播器添加上面的列表中所允许的监听器。例如, 你可以用actionscript建立一个普通的对象,然后使他监听一个鼠标对象(广播器)。这个鼠标对象可以在当鼠标被按下,移动或者释放的时候让物体执行onMouseDown,onMouseMove和onMouseUp代码。
认识监听器和广播器有两种不同的方法。其中一种方法,表面上在我们的认识当中,独立的监听器是可以意识到的,它们监听事件是否在Flash中发生。为了真正了解它们是怎么工作的,我们运用第二种方法,使我们知道监听器和广播器在Flash内部是怎么工作的。
监听器监听
我第一次运用到监听器是在MX的影片剪辑运用一个onKeyUp事件。如果在一个影片剪辑自身加了一个onClipEvent(keyUp),这个keyUp事件是被认可的,我加入里面的代码也就会执行了。试着用这种方法来定义事件:instance_mc.onKeyUp = function(){...},没有产生什么结果。直到后面我才意识到我没有把这个影片剪辑定义成Key对象(事件广播器)的一个监听者(器)。只有定义了之后, 它才可以探测到键盘上的一个键是否被按下,然后在被释放的时候,执行这个事件。所以我们可以这样写(直接在时间轴上写,而不是在影片剪辑上写):
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对象事件的监听器

[1] [2]  下一页

Tags:

  • 好的评价 如果您觉得好,就请您
      0%(0)
  • 差的评价 如果您觉得差,就请您
      0%(0)
  • 相关文章
    广告赞助

    文章随便看看 设计素材 建站学院 网页模板 视频教程

    网友评论

    共有 0 位网友发表了评论,得分 0 分,平均 0 分    查看完整评论

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 1分

    内 容:

             通知管理员 验证码: