Flash ActionScript图文教程:处理事件篇

来源:IT.com.cn  作者:陈孝强
Flash ActionScript图文教程:处理事件篇
摘要:事件,是推动Flash程序运行的灵魂,可以说,没有事件就没有Flash程序,真是因为有了丰富的事件,Flash程序的交互性才能够得以实现。开发Flash程序时,我们需要花很大一部分精力去估计程序应该处理哪些事件以及如何处理这些事件。比方说对一个按钮,我们是不是…

2.2.3影片剪辑和按钮

从前面的实例可以看出,影片剪辑的实例也是可以拥有自身的事件处理代码的。但是在使用影片剪辑实例事件时必须注意以下几个问题:
  我们可以为影片剪辑实例添加原本由按钮捕捉的事件,比如rollOver、rollOut等等。不过要特别注意,影片剪辑实例虽然可以捕捉这样的事件,但是在这些事件的处理中我们不能直接引用其他的对象,一般我们只对影片剪辑自身的属性进行修改,比如前面影片剪辑实例dragTest_mc处理事件就是一个例子。我们可以在这个事件的处理中修改影片剪辑实例dragTest_mc的透明度,但是不要指望在其中简单地加上message_txt.text=“”这样的代码就能修改反馈区的内容。在执行过程中,这样的代码是不会有效果的,而且Flash不会报错,这经常会让初学者感到晕头转向。解决的方法有两个,一是用按钮代替影片剪辑,其次是对上面的代码进行一下小修改,改成:_root.message_txt.text=””,这样程序又能够执行。_root是Flash提供的一个内置对象,通过它可以准确地定位界面上的元素。
  当某个影片剪辑实例被赋予了鼠标事件之后,鼠标指针在其上方会显示为一个小手,为了避免这种情况出现,可以让它捕捉rollOver事件,并加入这样的代码。

on (rollOver) {
  this.useHandCursor = false;
  }

useHandCursor这个属性就是设置当鼠标在当前对象上悬浮时是否显示手形指针,默认值为true,也就是显示手形指针,这里将其设置为false就不会显示了。
  我们可以为按钮实例指定名称(后缀一般用_btn),不过不要有错觉,按钮实例和影片实例还是很多区别的。最重要的点就是,按钮没有自己的时间线,而影片剪辑则有自己的时间线。这是什么意思呢?简单地说,这点区别在this的使用上面体现出来。比方说,如果我们为一个影片剪辑实例添加了这样的事件处理代码:

on (press) {
  this._rotation = 30;
  }

当你在这个影片剪辑实例上单击鼠标左键时,影片剪辑实例将会发生旋转。但是如果你将这样的代码赋予一个按钮实例,那么当你单击这个按钮时,将不会是按钮自身旋转而是按钮的父对象旋转。很多情况下,这种奇怪的现象会让分不清按钮实例和影片剪辑实例之间微小区别的用户答感困惑。
  再来看一个前面举过的一个例子
 
  on (releaseOutside) {
  eventTrapper_btn._x = _root._xmouse;
  eventTrapper_btn._y = _root._ymouse;
  }

这行代码中,你也许会觉得eventTrapper_btn._x这样的语句太繁琐,用this._x多方便直接呢?如果这段时间处理代码是赋予影片剪辑实例的话,这样做就没有问题,但是在前面的那个例子中,这段代码是提供给按钮实例使用的,所以必须清楚明白地讲清楚移动的对象,否则运行的效果会和我们预先的设想大相径庭。
  如果你需要使用一个影片剪辑代替按钮的话,可以考虑在其内部添加特殊的标签(_up、_over、_down),然后编写相应的代码。另外,每个按钮都会有一个“热区”,也就是单击有效的区域,通常就是按钮的图形覆盖的范围,如果你需要修改这个区域的范围可以使用影片剪辑实例的hitArea属性,例如

myClipButton_mc.hitArea = _root.myHitClip_mc;

总的来说,按钮够实现的功能,影片剪辑都能实现,而影片剪辑能够实现的功能按钮则未必能够实现。那还要按钮有什么用?这主要是由于,按钮是程序界面使用极其频繁的元素,提供专门的按钮类型可以提高设计的效率。

2.3帧事件

2.3.1帧事件简介

帧事件和前面介绍的鼠标事件以及键盘事件的主要区别在于,帧事件并不是一个交互式的事件。每当影片播放指定的帧时,帧事件内部的代码就会被执行。在Flash的开发环境中,帧事件在时间线上会有一个“a”标记。

在具体的设计中,帧事件的用处是非常多的。比方说影片的第1帧总是受到垂青的,因为我们一般总是要在这一帧当中对程序进行一些初始化操作,比方说定义变量、函数等等。再比如,在很多交互式的程序中,我们一般要在需要等待用户输入(比如单击一个按钮)的时候,选择恰当的帧插入一个帧事件,并在其中输入stop()或者类似的代码。

2.3.2帧事件应用实例

为了演示帧事件的原理和使用方法,我们将制作一个播放幻灯片的小程序。程序的界面上有一个图片显示区域(影片剪辑实例,名称为picture_mc),一个反馈信息显示区域(含两个动态文本,名称分别为message_txt和caption_txt)和一个播放控制按钮区域(包含三个按钮,功能分别是播放、暂停和复位,名称分别是play_btn、pause_btn和rewind_btn)。

这个程序实现的功能并不复杂,首先picture_mc会自动每隔一段时间切换一幅图片,用户可以在下面的播放控制栏中单击按钮来播放、暂停或者复位动画的播放。

2.3.2.1图片播放

1、打开库面板(快捷键Ctrl+L),单击左下角的添加按钮添加,选择新元件类型为“影片剪辑”,进入这个影片剪辑的编辑状态。

2、添加两个层,分别命名为“图片”和“脚本”,在“图片”层当中,添加若干个空白关键帧,然后在每一个关键帧内部贴上一幅图片,调整各幅图片的位置和大小,以免播放的时候图片位置错误。

3、逐一选择“控制”层当中的帧,分别输入类似这样的代码

stop ();
  _root.caption_txt.text = "水瓶座";

第一行的作用是让影片剪辑的播放停止下来,也就是显示图片,然后等待主场景发送过来的事件继续播放,紧接下来的那个语句用于在主场景中显示图片内容的提示,因此每一个帧中_root.caption_txt.text=””中后面引号里面的内容是不一样的。注意,这里的_root是必不可少的,否则代码执行的时候会找不到对象,别忘了,我们现在正在编辑一个影片剪辑自身的事件线,而他又要引用顶头上司(主场景)中的对象,不加上完整的头衔,自然在运行的时候是找不到对象的了。

4、在“控制”层中多添加一个帧,在这个帧的时间处理代码中输入

gotoAndPlay(1)

这句代码的作用是让影片播放完成之后重新回到第一帧重新播放。

【相关文章】好搜一下
Flash ActionScript图文教程:入门篇

Flash ActionScript图文教程

ActionScript是一种编程语言,Flash专用。ActionScript…