关闭

Flash AS3学习之路—鼠标事件

315人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:319709次
    • 积分:5626
    • 等级:
    • 排名:第4638名
    • 原创:255篇
    • 转载:85篇
    • 译文:0篇
    • 评论:91条
    最新评论