5.7.1 相关知识
动作脚本英文为 ActionScript,简称 AS,是一种程序设计语言,脚本由一条条的命令组成,
这些命令也叫代码,指示计算机完成相应的操作。动作脚本可以实现和用户的交互响应,实现 较复杂、更逼真的动画效果。
脚本是由英语单词、数学符号和函数构成的。下面是一个 ActionScript 的例子:
on (press)
{ gotoAndPlay ("my frame"); }
可以通过其中的关键单词推测这段程序的作用。单词 press 表示按,即用鼠标在某种对象 上面单击,这里的对象就是按钮。第二行中的长单词可以分开读成“go to and play”,可以将其 理解为命令 Flash 到达影片中的一个特定位置并从这一特定位置开始播放影片。从以上可以看 出,ActionScript 可以控制 Flash 影片的播放。
Flash 影片可以包含若干场景,每个场景都有时间轴,每条时间轴从第 1 帧开始。如果不添 加 ActionScript,Flash 影片会自动从场景 1 的第 1 帧开始播放,直到场景 1 的最后一帧,然后接 着播放场景 2,依此类推。ActionScript 的主要目的就是用来改变这种自动而死板的线性播放行 为,一段脚本可以使影片在一个特定的帧上停止,循环播放前面的部分,甚至于让用户控制要 播放哪一帧。ActionScript 能够使影片完全脱离被动的线性播放模式。这还不是 ActionScript 的 所有功能,它还可以将 Flash 影片从简单的动画改变为具有交互能力的电脑程序。
写代码时需要注意书写规范:ActionScript 中严格区分大小写字母,标点符号必须在英文
状态下输入,关键字一般呈现蓝色(关键字是具有特定含义的保留字,是用于执行一项特定操
Release:当释放按钮时触发。
ReleaseOutside:鼠标指针位于按钮内部按下按钮,然后将鼠标指针移到该按钮外部并释 放鼠标时触发。
RollOut:当鼠标指针移至按钮区域之外时触发。
RollOver:当鼠标指针移过按钮区域时触发。
DragOut:当在按钮上单击鼠标,然后将鼠标指针拖动到按钮之外时触发。
DragOver:当用户在按钮外部按下鼠标,然后将鼠标指针拖动到按钮之上时触发。
影片剪辑。
EnterFrame:以 SWF 文件的帧频重复触发。
MouseDown:当按下鼠标时触发。
MouseMove:当鼠标移动时触发。
MouseUp:释放鼠标时触发。
Press:鼠标指针处于影片剪辑之上单击鼠标时触发。
Release:在影片剪辑上释放鼠标时触发。
ReleaseOutside:当影片剪辑区域中按下鼠标并且在影片剪辑区域之外释放它后触发。
RollOut:当鼠标指针移动到影片剪辑区域的外面时触发。
RollOver:当鼠标指针划过影片剪辑区域时触发。
帧事件。
在主时间轴或影片剪辑时间轴上,当播放头进入关键帧时会发生。
(2)ActionScript 中的事件处理。
事件处理函数。
事件处理函数由三部分组成:事件所应用的对象、对象的事件处理函数方法的名称和分 配给事件处理函数的函数。
例如:新建一个文件文档,建立一个 10 帧的动画,放置一个按钮元件,命名为 stop_btn。
在第 1 帧上写以下代码,将一个函数分配给按钮的 onPress 事件处理函数,该函数让动画停止。
Stop_btn.onPress=function(){
Stop();
4.影片剪辑属性
通过调整影片剪辑的各种属性可以改变影片剪辑的位置和显示状态。
_x 和_y 属性代表影片剪辑在场景中的水平坐标和垂直坐标。
_xscale 和_width 属性决定影片剪辑在水平方向上的显示宽度。
_yscale 和_height 属性决定影片剪辑在垂直方向上的显示高度。
_rotation 属性可以旋转影片剪辑。
_alpha 属性代表影片剪辑的透明度,
_visible 属性决定影片剪辑是否可见。
使用关键字_xmouse 和_ymouse 可以获取鼠标光标在屏幕中的坐标位置。
例如设置元件的基本格式属性是:元件名.属性名=属性值。
在场景中放 3 个元件,分别为风车影片剪辑元件、水果影片剪辑元件和按钮元件取实例 名为 fc_mc,sg_mc,sx_btn。
添加以下代码:
onEnterFrame=function(){
fc_mc.rotation+=20;
sg_mc._x+=3;
sg_mc._xscale=sg_mc._yscale+=2;
sg_mc._alpha-=2;
}
_btn.onRelease=function(){
Delete onEnterFrame;
Sg_mc._x=275;
Sg_mc._y=200;
Sg_mc._xscale=sg_mc._yscale=100;
Sg_mc._alpha=100;
}
以上代码通过帧频事件和按钮事件来设置改变影片剪辑类元件的属性。
5.影片剪辑的常用方法
常用方法有 Stop,play,gotoandplay,gotoandstop,attachmovie,createemptymovieclip,duolicatemo- vieclip,startdrag,stopdrag,swapdepths,getnexthighestdepth 等。
这些方法的调用格式是:元件名.方法名(参数列表)
例如:通过元件的 onMouseDown 和 onMouseUp 事件,了解 startDrag 和 stopDrag 方法的 调用。
建立一个影片剪辑元件,放入主场景中,起实例名为_mc,在第 1 帧写事件响应代码如下:
onMouseDown = function(){
_mc. startDrag();
}
onMouseUp = function(){
_mc. stopDrag();
}
以上代码的作用是当按下鼠标时,影片剪辑跟随鼠标,松开鼠标时停止跟随。
6.影片播放控制
控制影片播放流程的命令有许多,如下所示:
stop:使影片停止在当前时间轴的当前帧中。
num=random(10);
图 5-71
(4)在两个图层的第 2 帧位置分别插入普通帧。
for(var i=1;i<10;i++){
myNum.duplicateMovieClip("myNum"+i,i)
this["myNum"+i]._y=myNum._y+i*myNum._height*0.7 this["myNum"+i]._alpha=10*(10-i)+10
}
(7)返回“场景 1”,从“库”面板中将“数字 2”影片剪辑元件拖放到舞台中的任意位 置。选中“数字 2”影片剪辑实例,在“属性”面板中为其命名为 myNum,如图 5-73 所示。
图 5-73
(8)选中实例,然后打开“动作”面板,在其中输入以下代码:
onClipEvent(load) {
_alpha=random(95)+5
a=((100-_alpha)*4)*0.08+4;
_y=-myNum._height*10;
_x=random(400);
_xscale=_yscale=1.2*((_alpha*0.4)*2+30);
}
onClipEvent (enterFrame) { _y+=a;
if (_y>300) {
this.removeMovieClip();
} }
(9)新建图层,命名为“动作”,打开“动作”面板,如图 5-74 所示,在其中添加以下 代码:
var n=0;
onEnterFrame=function () {
myNum.duplicateMovieClip("ball"+n++, n);
if (n>300) { n = 0;
} }
图 5-74
(10)保存文件并预览效果,如图 5-75 所示。
图 5-75 操作二 制作文字波动效果
【设计思路】
输入一行文字,为每一个文字加上一段运算实例位置的代码。每个文字的位置数值 依次减少,以实现波动效果。
【操作步骤】
(1)新建一个文件,背景色为黑色。
(2)执行“插入”→“新建元件”菜单命令,新建一个影片剪辑元件,命名为“动”,
并使用文本工具输入一个白色文字“动”,如图 5-76 所示。
(3)选择文字,执行“复制”、“粘贴”命令,并执行“修改”→“变形”→“垂直翻转”
菜单命令,制作文字倒影。选中倒影文字,在“颜色”面板中将 Alpha 值设置为 50%,如图 5-77 所示。
图 5-76 图 5-77
(4)选中上面的文字,打开“滤镜”面板,为文字添加发光效果,颜色为绿色,如图 5-78 所示。
(5)用同样方法制作“画”、“制”、“作”、“案”、“例”、“教”、“程”等另外 7 个影片剪 辑元件,如图 5-79 所示。
图 5-78 图 5-79
(6)返回“场景 1”,将 8 个元件依次放在场景中,如图 5-80 所示。
图 5-80
(7)选择第一个文字实例,打开“动作”面板,如图 5-81 所示,输入以下代码:
onClipEvent (load){
t=360-0;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360)
onClipEvent (load){
t=360-20;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360)
onClipEvent (load){
t=360-40;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360)
t+=5
else t=t-360 }
(10)选择第四个文字实例,打开“动作”面板,输入以下代码:
onClipEvent (load){
t=360-60;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360)
onClipEvent (load){
t=360-80;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360)
onClipEvent (load){
t=360-100;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360)
onClipEvent (load){
t=360-120;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5)
if(t<=360)
onClipEvent (load){
t=360-140;
}
onClipEvent (enterFrame){
this._xscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) this._yscale=100*(Math.sin(Math.PI/180*t)*0.2+0.5) if(t<=360) 罩层,可以制作特殊效果的动画;通过按钮,可以实现交互式的动画制作;通过 ActionScript 代码,初步了解了动画与编程相结合的强大威力。