前面简要介绍了一下几种常用的鼠标事件,下面我们就通过一个完整的例子来综合运用一下这些事件。
首先建立一个场景,向其中添加三个影片剪辑实例,名称命名为hand_mc、message_txt、eventTrapper_btn和dragTest_mc,hand_mc用来替换鼠标、message_txt是一个动态文本,显示反馈信息,eventTrapper_btn是按钮实例,用来捕捉各种鼠标事件,dragTest_mc则用来演示拖动事件的处理。
2.2.1自定义鼠标
我们经常需要在Flash程序中使用自定义的鼠标指针,下面在这个例子中,我们将把鼠标指针换成自定义的外形。进入主场景,选择第一帧,在脚本面板中输入以下的代码:
stop ();
Mouse.hide();
startDrag ("hand_mc", true);
Message_txt.text = "开始鼠标事件试验 ";
2.2.2捕捉并处理事件
现在选中影片剪辑实例eventTrapper_btn,进入脚本面板,在这里我们可以编写一系列的事件处理代码。前面我们介绍了多个和鼠标相关的事件,这里就将其一个个捕获,注意观察他们之间的异同。
on (rollOver) {
message_txt.text = "鼠标浮动事件";
}
on (rollOut) {
message_txt.text = "鼠标移出事件";
}
on (press) {
message_txt.text = "鼠标单击事件";
}
on (dragOut) {
message_txt.text = "鼠标在当前对象上按下左键后拖出";
}
on (release) {
message_txt.text = "鼠标释放事件";
}
选择影片剪辑实例dragTest_mc,然后再代码面板中输入这样的代码
on (dragOver) {
this._alpha = this._alpha - 10;
}
再选择按钮eventTrapper_btn,为其添加这样的代码:
on (releaseOutside) {
eventTrapper_btn._x = _root._xmouse;
eventTrapper_btn._y = _root._ymouse;
}
上面是通过鼠标拖动的方式移动物体,下面再试试看用键盘来实现,选择evnetTrapper_btn,为其追加这样的代码。
on (keypress"
") {
eventTrapper_btn._x = eventTrapper_btn._x-6
}
on (keypress"
") {
eventTrapper_btn._x = eventTrapper_btn._x+6
}
on (keypress"
") {
eventTrapper_btn._y = eventTrapper_btn._y-6
}
on (keypress"
") {
eventTrapper_btn._y = eventTrapper_btn._y+6
}
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;
}
我们可以为按钮实例指定名称(后缀一般用_btn),不过不要有错觉,按钮实例和影片实例还是很多区别的。最重要的点就是,按钮没有自己的时间线,而影片剪辑则有自己的时间线。这是什么意思呢?简单地说,这点区别在this的使用上面体现出来。比方说,如果我们为一个影片剪辑实例添加了这样的事件处理代码:
on (press) {
this._rotation = 30;
}
再来看一个前面举过的一个例子
on (releaseOutside) {
eventTrapper_btn._x = _root._xmouse;
eventTrapper_btn._y = _root._ymouse;
}
如果你需要使用一个影片剪辑代替按钮的话,可以考虑在其内部添加特殊的标签(_up、_over、_down),然后编写相应的代码。另外,每个按钮都会有一个“热区”,也就是单击有效的区域,通常就是按钮的图形覆盖的范围,如果你需要修改这个区域的范围可以使用影片剪辑实例的hitArea属性,例如
myClipButton_mc.hitArea = _root.myHitClip_mc;
总的来说,按钮够实现的功能,影片剪辑都能实现,而影片剪辑能够实现的功能按钮则未必能够实现。那还要按钮有什么用?这主要是由于,按钮是程序界面使用极其频繁的元素,提供专门的按钮类型可以提高设计的效率。