这篇教程为“Flash AS 入门教程”的一部分。查看全套教程>>>>。
本节应掌握的知识要点:
① onClipEvent()应用;②_xmouse 属性;③int函数应用。
onClipExent()是一个事件处理函数,也是在Flash动作脚本中使用频率非常高的一个语句,其功能是触发为特定影片剪辑实例定义的动作。这个事件处理函数只能添加在影片剪辑实例上,不同于on()事件处理函数可以分别添加在影片剪辑和按钮上。
语法格式是:
onClipEvent(movieEvent){
要执行的语句
}
小括号中的参数movieEvent 是一个称作事件的触发器。当事件发生时,执行后面大括号中的语句。
这一节要学习的是两个最常用的事件:
load事件,是当影片剪辑实例出现在时间轴中时,即执行大括号中的语句块,语句快只执行一次。
enterFrame事件,是以与影片剪辑帧频相同的速率不断重复触发的动作。
请看示例动画“实例1-10”。
实例1-10 onClipExent()应用
动画开始播放时,画面上一只小松鼠在场景上原地跳跃,点击右下角按钮即会增加一只小松鼠的倒影,场景右下角出现了两行动态文本,显示的是场景上鼠标的横坐标位置。这时移动鼠标小松鼠会随着鼠标移动,同时下面一行文本的坐标数值会随着鼠标的移动不断的更新,而上面的一行文本却始终显示一个固定的数值。
分析一下源文件,场景上5个图层共两帧,【松鼠mc】图层上有一个实例名为shu_mc的影片剪辑实例,【动态文本】图层上有上下两个动态文本框,变量名分别为t1_txt、t2_txt,【空白mc】图层第1帧是一个空白关键帧,第2帧上有一个空白影片剪辑实例(注意,因为没有实际内容,这个影片剪辑在场景上只能看见一个白色小圆圈),【按钮】图层第1帧和第2帧上各有一个按钮。
下面我们来看看源文件中的语句,通过前面的学习,大家对以下语句应该非常熟悉,不用注释也能看明白了。
第1帧上:stop();
第1帧的按钮上:on (press) {
play();
}
空白影片剪辑上:
onClipEvent (load) { //当当前影片剪辑一旦出现在时间轴上,即激发以下动作
_root.stop();
_root.shu_mc.duplicateMovieClip("shu_mc1", 1);
_root.shu_mc1._yscale = -100;
_root.shu_mc1._alpha = 50;
_root.t1_txt = "_xmouse= "+int(_root._xmouse);
//_xmouse 鼠标的x坐标位置。int 取整函数,将十进制的数字转换为最相近的整数值。
}
onClipEvent (enterFrame) { //只要当前影片剪辑存在在时间轴上,就不断重复执行以下动作
_root.shu_mc._x = _root._xmouse-50;
_root.shu_mc1._x = _root.shu_mc._x;
_root.t2_txt = "_xmouse= "+int(_root._xmouse);
}
第2帧的按钮上:on (press) {
removeMovieClip(shu_mc1);
play();
}
我们来分析一下语句的执行流程:
动画开始播放即停止在第1帧,点击按钮开始播放,当进入第2帧时,添加有onClipEvent语句的影片剪辑出现在时间轴上,这时,动画的播放由这个影片剪辑上的语句进行控制。
首先执行onClipEvent(load)大括号中的语句块,load事件是当影片剪辑一旦出现在时间线上时触发的动作,_root.stop();令播放头停止在场景第2帧,接下来复制出一个shu_mc影片剪辑,命名为“shu_mc1”,设置层深度为1,再由下面的两行语句为新复制出的影片剪辑设置属性,将纵向缩放比例设置为-100(单位为百分比),使其倒置在场景上,将透明度属性设置为50%,由最后一条语句,在场景上的t1_txt动态文本框中显示字符串"_xmouse= "并上鼠标当前的横坐标值,这个值由int函数转换为整数。到此,load事件里的语句块就执行完了。
由于load事件里的语句只执行一次,所以场景上的t1_txt动态文本框里显示的鼠标横坐标值始终是一个固定的数值。
接下来,开始执行enterFrame事件里面的语句块,由第1行语句定义,将场景上鼠标的横坐标位置减去50像素的这个值,赋予场景上shu_mc影片剪辑的横坐标,即shu_mc的横坐标位置与当前鼠标位置相距50像素,动画的实际效果是小松鼠位于鼠标箭头的左侧,再由第2行语句将shu_mc的横坐标值赋予新复制出的影片剪辑shu_mc1的横坐标。最后一条语句和上面load事件的最后一条相同,是在场景上的t2_txt文本框中以整数显示鼠标当前的横坐标位置。
到此enterFrame事件里面的语句块就执行完了一次,但是,语句的执行并没有到此为止,只要当前影片剪辑(即这个空白影片剪辑)存在在时间轴上,这个语句快中的动作就会不断的重复执行,其执行的速率与当前影片的帧频相同。
由于enterFrame事件里面的语句块是不断重复执行的,由此就实现了不断的计算当前鼠标的横坐标位置,并将它减去50像素后的新值不断赋予shu_mc影片剪辑,再将这个值不断的赋予shu_mc1影片剪辑,同时,动态文本框t2_txt中也在不断的更新鼠标位置的坐标值。
实现的动画实际效果就是,场景上的小松鼠和倒影不断的跟着鼠标移动下面的动态文本框中不断的更新显示鼠标的横坐标位置。而上面的动态文本框中始终是一个固定的数值。
当我们点击场景上的按钮时,新复制出的shu_mc1影片剪辑被删除,并由play动作指令影片继续播放,由于场景上只有两帧,所以播放头直接返回时间轴第1帧,到了第1帧,又由帧动作脚本stop指令其在第1帧停止播放,这时候我们看到的动画效果是,场景上的小松鼠倒影消失了,动态文本框停止了更新鼠标的横坐标值,小松鼠也不跟随着鼠标移动了。这是因为加载有onClipEvent函数的空白影片剪辑已经从时间轴上消失了。
当再次点击场景上的按钮时,播放头进入第2帧,空白影片剪辑出现在场景上,于是又开始执行onClipEvent函数中的动作。
课后练习:素材源文件下载
在素材源文件中按如下要求完成练习:
1. 在【文本】图层创建3个动态文本框。
2. 点击场景第1帧上的按钮,进入第2帧
3. 在第2帧创建一个空白影片剪辑,在空白影片剪辑上添加onClipEvent函数,实现的效果是:
①使场景上的小松鼠翻转身面朝左面;
②复制出一只新的小松鼠跟在其身后;
③鼠标指针、小松鼠、新复制出的小松鼠之间横坐标均相距10个像素;两只小松鼠跟随鼠标移动;
④3个动态文本框中分别显示鼠标、小松鼠、新复制的小松鼠的横坐标位置,并不断动态更新。
4. 点击按钮时删除复制出的小松鼠,原来的小松鼠返回到场景中的水平中点位置,并回转身面朝右方,播放头返回第1帧,动态文本也停止更新。
课后练习1-10效果。