| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
新易网络提供100M
龙太极/100m/asp/
无限网络提供50M 
霞光科技50M/Htm/
苏能科技100M/FTP
悠博科技50M/FTP/

Flash MX 事件模型           

Flash MX 事件模型

作者:佚名 来源:闪吧 作者: Guy Watson 更新:2007-1-13 20:48:34 错误报告 我要投稿

转处:http://www.actionscripts.org
作者:   Guy   Watson   ,   MX   101




在Flash   MX的新特性里,我最喜欢的就是事件模式了,它使生活变得更加简单,使编写代码更加有趣,更加有组织化,如果你还不了解的话,现在就可以知道了。你正在遗漏,但是你不经意的正在使用。这篇文章希望能够帮助那些不管是初学者或者是超级用户。看过之后能够理解和使用Flash事件模式。我认为把一个新的东西解释给人们,让他们从中学到东西的办法就是将主题与人们生活有关联的东西进行比较,这是一个现实世界的类比。因此这篇文章用类比来表达一些概念...

你所需要知道的:

要想明白这篇文章的一些解释,你需要知道一些关于Flash的东西。首先,你需要知道Flash是面向对象的,因此你应该对Flash中的面向对象的编程有一个基本的了解。如果你能回答下面的问题,你就可以继续阅读这篇文章,你会明白一切。否则你必须查看这个页面,让你对Flash面向对象的编程有一个深入的了解:   Robin   Debreiul.

什么是对象?
什么是方法?
什么是属性?
什么是Flash中预定义的对象?
函数和方法有什么区别?
变量和属性有什么区别?

事件模式:

我们都想知道在世界上和地区里正在发生着什么,因此我们读报,看电视,上网去知道发生的事情。新闻是由正在发生的“事件”聚集而成。他们是有标签的“事件”因为他们是非常及时的报道,那么人们就想或者需要知道。

将Flash中的事件模式认为是新闻快报。它用Flash播放器的方式告诉我们一些正在Flash电影中发生的重要事件。当然这些新闻没有我们生活中发生的重要,但是作为一个脚本是很重要的.

因此从ActionScript来看事件模式是Flash内部的运转,它告诉Flash电影何时重要事情发生。

一个事件:

例如CNN,   将记者派出去寻找新闻,当世界上有事发生时,比如:火山爆发,这是一个标明的事件,它很重要。那么人们想知道或者需要知道。因此那些记者看火山爆发后,立刻向总部打电话,叫总部把这条新闻加到新闻快报,不要很长的事件,这条最新新闻通过电视,网页,收音机和他们科技向全世界传播。

同样,你的Flash电影也就这样,只不过长度小多了。Flash播放器有新闻报道,例如当使用者移动鼠标时,一个新闻报道鼠标移动很快的告诉总部(Flash播放器),并且让他们把最新的新闻加到新闻快报上去,因为报道知道这是一些Flash电影的目标所想知道的事情,很快最新事件在Flash中广播出来。

因此在actionscript中,一个事件是对行为状态的改变作出反应回答的告示,例如键盘上的一个按钮被按动,鼠标移动或者一个XML文件全部被下载。

事件操作者:

Flash播放器新闻快报与我们共享最新消息。因此我们可以行动,者就是说当我们被告知一个事件发生了的时候我们可以执行一段代码,这就是Flash事件操作者时间播放的方法。

事件操作者是一个你为用户对一个目标下定义所具体指定的程序。它会告诉目标在一个具体的事件发生时做什么。   

因此在actionscript中,事件操作者是简单的一个任何用户下定义的属性,它包括参考和Actionscript的方法。方法被呼叫并且内码被执行。(当相关事件发生时)   

分类事件:

Flash播放器的新闻快报分成了处理不同事件的几个部分。有所知道的目标,每一个预定义的actionscript对象,键盘,鼠标,电影片断,他们有自己的能密切注意与目标有关的事件的新闻记者。因此举个例子当鼠标被按下,当鼠标被释放,当鼠标被移动时,鼠标对象新闻报道仅仅是用来通知鼠标总部,当其中一个事件发生,新闻报道通知鼠标总部,总部然后播放新闻快报。

每一个部分的新闻报道所注意的事件的清单在Actionscript字典中.

下面是一个清单,包括非常普通的事件以及与他们有联系的事件操作者:

事件介绍   /   事件操作者


Mouse   is   moved/onMouseMove
Mouse   is   pressed/onMouseDown
Mouse   is   released/onMouseUp
Key   is   pressed/onKeyDown
Key   is   released/onKeyUp


因此来说,actionscript每一个预定义对象,比如说:鼠标,键盘,和电影片断有他们自己的与目标有关的事件。它对键盘目标包含与鼠标有关的事件是没有意义的...

监听者:

Listeners   are   user   defined   actionscript   objects   that   are   registered   with   specific   departments   of   the   flash   players   news   bulletin,   because   they   are   interested   in   seeing   the   news   that   those   departments   broadcast.   After   an   object   has   registered   interest   with   one   of   the   news   bulletin   departments,   whenever   an   event   occurs,   that   the   news   bulletin   department   is   looking   out   for,   a   news   broadcast   is   sent   out   and   the   registered   object   will   receive   it.   

So   in   actionsript   terms,   a   listener   is   an   object   that   contains   event   handlers,   the   object   registers   with   a   specific   predefined   object   so   that   it   can   receive   the   events   related   to   that   predefined   object.


使用监听者方法:

我们有方法允许我们从新闻快报部分来在广播中注册和不注册我们的兴趣,为你和新闻快报部分以前注册一个目标。我们使用Addlistener方法,不注册的话我么使用movelistener方法,在这个例子中,我们的目标对鼠标目标广播有兴趣:

//create   a   new   empty   objectmyobject   =   new   Object();//now   register   our   interest   with   the   Mouse   objects   broadcastMouse.addListener(myobject);

一下是一个在鼠标广播对象中我们不注册所使用的程序:

Mouse.removeListener(myobject);

因此,在Actionscript中,无论鼠标事件何时发生,"my   object"的目标会被通知鼠标事件发生你并且了哪里发生。

为对象添加事件操作者:

在空白的对象中,我们创造了在广播中的行为"my   object"它来自新闻快报的鼠标部分,我们需要告诉它当一个具体的事件发生时该做什么,于是你要知道,我们必须为对象对事件操作者下定义,对事件操作者下定义将会把"mouse   wos   moved"直接输出到窗上,不管鼠标什么时候移动,我们要使用on   mouse   move事件操作者,如下:


//create   a   new   empty   objectmyobject   =   new   Object();

//now   register   our   interest   with   the   Mouse   objects   broadcastMouse.addListener(myobject);

//define   the   onMouseMove   event   handler   for   our   objectmyobject.onMouseMove   =   function()   {
   trace("Mouse   was   moved");
};

将"Key   was   pressed"输出到窗口,无论什么时候按钮被按动,通过对上面的目标注册,通过键盘新闻快报部分的使用on   keydown   事件操作者   :

//create   a   new   empty   objectmyobject   =   new   Object();

//now   register   our   interest   in   the   Mouse   objects   broadcastMouse.addListener(myobject);

//define   the   onMouseMove   event   handler   for   our   objectmyobject.onMouseMove   =   function()   {
   trace("Mouse   was   moved");};

//now   register   our   interest   in   the   Key   objects   broadcastKey.addListener(myobject);

//define   the   onKeyDown   event   handler   for   our   objectmyobject.onKeyDown   =   function()   {
   trace("Key   was   pressed");
};


因此,在我们来解释一下当使用者在Actionscript中点击它的鼠标时发生了什么,不管什么时候点击鼠标目标通知"my   object"   on   mouseDown事件发生了,然后引起了on   mouse   down事件操作者,转为代码将"mouse   was   moved"输出到窗口。

电影片断(Movieclip)和按钮(Button)的自动监听:

上一片我们讲过,一个对象想要接收事件通知,它必须和一个有这些事件的预定义对象一起注册。在Flash5里,Movieclip是从Movieclip类中引申下来的对象。现在在Flash   MX中,Button也是从button类中引申出来的对象。每一个Movieclip实例的关系都自动和Movieclip"部门"注册到一起,每一个Button实例的关系都自动和Button"部门"注册到一起。这表示你不用明显地使用addListener方法来通知一个Movieclip。Button也是一样。所以以下代码是无错的:


//create   a   new   movieclip   on   the   _root   timeline_root.createEmptyMovieClip("mymovieclip",   1);

//define   the   ‘onMouseMove’   event   handler   for   our   Movieclip_root.mymovieclip.onMouseMove   =   function()   {
//move   this   movieclip   to   the   mouses   position   this._x   =   _root._xmouse;   this._y   =   _root._ymouse;};


下面让我们来解释一下当用户移动鼠标后发生了什么,无论什么时候用户点击鼠标,Mouse对象通知mymovieclip对象一个onMouseMove事件发生了然后一个onMouseMove   Event   Handler被触发了,这个Event   Handler执行了这段代码来移动这个Movieclip到鼠标的新位置。   

所有Movieclip自动接收Key,Stage和Mouse事件的通知。

Flash   5   的事件模型(Event   Model):

Flash   5   为Movieclip和button引进了一个基础的事件模型。在上一个例子中,我们当鼠标移动到一个新位置时Movieclip移动到鼠标的当前位置。如果你想在Flash   5中实现这段代码,你需要在Movieclip外加上这段代码:

onClipEvent   (mouseMove)   {
   this._x   =   _root._xmouse;
   this._y   =   _root._ymouse;}

或者如果当按钮被点击时我们需要运行一些代码,你需要在Button外加上这段代码:

on   (press)   {
   trace("Our   button   was   pressed");}


上面这些代码,现在在Flash   MX中用新的事件模型可以写成:

Yourbutton.onPress   =   function()   {
   trace("Our   button   was   pressed");};


为了兼容性,你仍然可以在Flash   MX中使用Flash   5的旧事件模型,Macromedia公司没有官方地屏蔽这项功能,但是依我看还是考虑用新的吧,因为老的模型根本没有一点优势。

Flash   MX不再需要Flem:

Branden   Hall为Flash   5以插件的形式创立了一个事件模型叫Flem(谁知道这个东东是什么啊~~~?),和Flash   MX的事件模型相比,它给你同样的创建事件模型的能力,因此库(Library)的用法就不是必需的了。

新事件模型的优势:

新的事件模型和旧的事件模型相比,第一个好处就是你可以在任何时间改变你的Event   Handler,由此来改变当一个事件发生时function的执行方式。再有,因为一个Event   Handler现在是一个对象的属性,它可以被删除,从而来节省CPU(有什么关系吗~~~~??)。在Flash   5里,你不能用attachMovie方法把一个Movieclip从一个Library贴出来,而且你不能给它赋予任何Event   Handler,因为onClipEvent()必须在Movieclip里面定义,现在,这个可以很容易地在Flash   MX里被实现。最后,Flash   MX里的事件模型比Flash   5所提供的事件模型整洁和容易。   

最后的笔记:   你可以为这篇文章添加内容和发布评论在它的原出处   FlashGuru''s   MX   101.   
http://www.flashguru.co.uk/

这篇文章很适合中级的Flash作者,但我的翻译水平有限,请大家多批评。   


文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。