flash在很大一块程度上的应用为多媒体交互设计,交互顾名思义我们就得用鼠标去点啊点,在AS2中我们有对应的MouseDown、MouseUp、onPress、onRelease等一系列的鼠标动作。这些点来点去我们就可称为事件,而AS3对于事件的处理我们前面已经看到了通过addEventListener,移除的时候使用removeEventListener
事件的处理AS3中有专门的Event类来处理事件,Event类又包括以下几个子类
鼠标类:MouseEvent
键盘类:KeyboardEvent
时间类:TimerEvent
文本类:TextEvent
我们这篇方要来看看MouseEvent类,首先看看有哪些类型的鼠标事件,也就是MouseEvent类的公共变量
CLICK : String = "click"单击
DOUBLE_CLICK : String = "doubleClick" 双击
MOUSE_DOWN : String = "mouseDown" 按下
MOUSE_LEAVE : String = "mouseLeave" 鼠标移开舞台
MOUSE_MOVE : String = "mouseMove" 移动
MOUSE_OUT : String = "mouseOut" 移出
MOUSE_OVER : String = "mouseOver" 移过
MOUSE_UP : String = "mouseUp" 提起
MOUSE_WHEEL : String = "mouseWheel" 滚轴滚动
ROLL_OUT : String = "rollOut" 滑入
ROLL_OVER : String = "rollOver" 滑出
下面来做个小例子,我们打开第一篇中的例子,将下面的语句
btn1.addEventListener(MouseEvent.MOUSE_UP,ClickMovie1);
换成
btn1.addEventListener(MouseEvent.MOUSE_MOVE,ClickMovie1);
是不是一移动就会trace很多遍,大家慢慢把上面的红色关键字用MouseEvent类的公共变量一个个替换,看看具体效果吧,注意在使用DOUBLE_CLICK,必腨先对对象开启双击开关,如 btn1.doubleClickEnabled=true;使用MOUSE_WHEEL时必须先对对象单击一下,使对象获得焦点,再滚动滚轴
明眼的大家或许有疑问,MOUSE_OVER与ROLL_OVER及MOUSE_OUT与ROLL_OVER是不是相同,的确在很多时候它们实现的是同样的功能,但有差别是肯定的,否则ADOBE那帮家伙们不会无缘无故的去搞出另一个事件出来,那么到底有什么差别,我们来做个实验:
新建一个AS3文档,新建一个铵钮,然后再将这个按钮转换成一个影片剪辑,命名为Movie1,然后在Movie1里面再新建一个背景层置立于按钮的下面,用矩形工具画一个大于按钮的图形。同样的我们通过文档类,新建一个as文件,在其中输入如下代码:
package {
import flash.events.MouseEvent;
import flash.display.SimpleButton;
import flash.display.MovieClip;
public class main extends MovieClip {
public function ClickMovie1(event:MouseEvent):void {
trace("Me");
}
public function main():void {
Movie1.addEventListener(MouseEvent.ROLL_OVER,ClickMovie1);
//Movie1.addEventListener(MouseEvent.MOUSE_OVER,ClickMovie1);
Movie1.addEventListener(MouseEvent.ROLL_OUT,ClickMovie1);
//Movie1.addEventListener(MouseEvent.MOUSE_OUT,ClickMovie1);
}
}
}
我们运行,用鼠标移动看看效果,输出几个ME,如果正常的话应该输出两个,现在我们再将注释换一下为,
//Movie1.addEventListener(MouseEvent.ROLL_OVER,ClickMovie1);
Movie1.addEventListener(MouseEvent.MOUSE_OVER,ClickMovie1);
// Movie1.addEventListener(MouseEvent.ROLL_OUT,ClickMovie1);
Movie1.addEventListener(MouseEvent.MOUSE_OUT,ClickMovie1);
我们再运行,移过后发现这次不止两个,而是六个,大家是不是发现什么问题了
我们还可以再继续做实现,我们将里面的按钮在添加一个事件,将里面的按钮命名为btn1,并在as文件中添加一个新的处理函数
public function ClickMovie2(event:MouseEvent):void {
trace("Me1");
}
然后注册btn1事件,采用ROLL
Movie1.addEventListener(MouseEvent.ROLL_OVER,ClickMovie1);
Movie1.addEventListener(MouseEvent.ROLL_OUT,ClickMovie1);
Movie1.btn1.addEventListener(MouseEvent.ROLL_OVER,ClickMovie2);
Movie1.btn1.addEventListener(MouseEvent.ROLL_OUT,ClickMovie2);
这是会分别输出ME,ME1,ME1,ME
反之我们换为MOUSE,则输出
Me
Me
Me1
Me
Me1
Me
Me
Me