1、苏州叶亮整理1Flash 动作脚本基础(一)动作脚本添加的三种方式:帧、影片剪辑(mc)和按钮1给帧加动作:给帧加动作时,只需选择需要加脚本的帧,打开动作面板,直接输入脚本即可。2给按钮加动作:给按钮加动作时需要选择【影片剪辑控制】集合中的 on 命令。这个命令是专门为按钮设计的,它提供了八种按钮的事件。分别是按下、滑过、释放、滑离、外部释放、拖过、拖离和按键。 press在鼠标指针经过按钮时按下鼠标按钮,会触发本事件一次。 release在鼠标指针经过按钮时释放鼠标按钮,会触发本事件一次。 releaseOutside当鼠标指针在按钮之内时按下按钮后,将鼠标指针移到按钮之外,此时释放鼠标按钮
2、,会触发本事件一次。可以利用 on 的这个事件来制作游戏。 rollOut鼠标指针滑出按钮区域,会触发本事件一次。 rollOver 鼠标指针滑过按钮,会触发本事件一次。当鼠标指针从按钮上滑过的时候,动画就开始执行播放动作了,而不需要点击它。我们可以利用 on 的这个特点来制作一些图示板,非常简单有效。滑离与滑过并不是相同的,滑离是指鼠标滑动到按钮上并离开以后开始响应,而滑过是指只要鼠标滑到按钮上,就开始执行动作。、dragOut在鼠标指针滑过按钮时按下鼠标按钮,然后滑出此按钮区域,会触发本事件一次。 dragOver 在鼠标指针滑过按钮时按下鼠标按钮,然后滑出此按钮,再滑回此按钮。拖过的效果
3、是在按钮上点击并按住鼠标不放,移出按扭区,再移回按钮上释放的事件。拖离与拖过有所不同,只要在按钮上按住鼠标左键然后移动到按钮外就会相应。他于滑离的区别在于拖离需要按住鼠标左键。苏州叶亮整理2 keyPress(“key“) 按下指定的键,会触发本事件一次。对于此参数的 key 部分,需指定键控代码或键常量。例如:on (dragOut) /当鼠标拖离按钮时执行下面的动作play(); /执行播放动作再如:on (keyPress “z“) /当按下键盘中的“z” 健时执行下面的动作play(); /执行播放动作方法:首先选择需要添加脚本的按钮,在动作面板上加入所需的脚本即可。3给 mc 加动作
4、脚本:要为影片剪辑添加脚本,首先要选中影片剪辑,再打开它对应的动作面板,然后在其中输入脚本。影片剪辑脚本和按钮的脚本类似,它们都使用事件处理函数,与按钮的on 关键字不同,影片剪辑使用 onClipEvent 关键字。当某种影片剪辑事件发生时,就会触发相应的事件处理函数。onClipEvent():这个语句指专门给电影剪辑添加命令的语句,就像 on 语句是专门给按钮添加命令一样。影片剪辑事件类别、onClipEvent(load)当影片片断第一次加载到时间轴时,会触发本事件一次、onClipEvent(enterFrame)当影片片断加载时间轴时,不论是放映或停止状态或显示与否,都会不断触发本
5、事件。所以只要此片断被加载后,此事件会一直不断地执行,直到影片片断被删除为止。、onClipEvent(unload)当影片片断被删除时,会触发本事件一次。、onClipEvent(mouseDown)当鼠标左键被按下时,会触发本事件一次。、onClipEvent(mouseUp)当被按下的鼠标左键被放开时,会触发本事件一次。、onClipEvent(mouseMove)只要在场景中移动鼠标,就会不断触发本事件。、onClipEvent(keyDown)当键盘被按下时,会触发本事件。苏州叶亮整理3、onClipEvent(keyUp)当已按下的键盘被松开时,会触发本事件一次enterFrame
6、()语句和 load()语句:影片剪辑最重要的两种事件是 load 和 enterFrame, load 事件在影片剪辑完全加载到内存中时发生。在每次播放 Flash 影片时,每个影片剪辑的 load 事件只发生一次。在主时间轴停止播放时,影片中的影片剪辑并不会停止播放,这个特性决定了影片剪辑的另一个事件 enterFrame 的重要性。enterFrame 事件在影片每次播放到影片剪辑所在帧时发生。如果主时间轴中只有一帧,且不论它是否在该帧停止,该帧中的影片剪辑都会不断触发 enterFrame 事件,且触发的频率与 Flash 影片的帧频一致。例如:onClipEvent (load) v
7、ar i = 0;onClipEvent (enterFrame) trace(i);i+;当影片剪辑的 load 事件发生时,将变量 i 设置为 0。当影片剪辑的 enterFrame 事件发生时,向输出窗口中发送 i 的值,然后将 i 加 1。输出窗口中会从 0 开始输出以 1 递增的数字序列,直到影片被关闭为止。为了熟悉影片剪辑事件处理函数的用法,我们来为影片剪辑编写一段简单的脚本,使影片剪辑逆序播放,我们将从影片剪辑的最后一帧处开始播放,使用 prevFrame 命令使影片剪辑每次后退一帧。选中影片剪辑 MC,此时动作面板的标题栏中应为“ 动作-影片剪辑”。打开动作面板,其中添加了如下
8、 ActionScript:onClipEvent (load) gotoAndStop(40);onClipEvent (enterFrame) prevFrame();在事件处理函数 onClipEvent (load)中,令 Flash 影片的播放头转到影片剪辑的第 40帧(即最后一帧) 。这个事件处理函数只在影片剪辑被加载完成时执行 1 次。第 2 个事件处理函数 onClipEvent (enterFrame)每播放 1 帧就执行 1 次,使影片剪辑回退 1 帧。按 Ctrl+Enter 键测试影片,你将看到影片剪辑的动画将从后往前进行播放,直到影片剪辑的时间轴回到第 1 帧,pre
9、vFrame 命令不起作用,影片剪辑停止播放。要让它连续不断的播放,可以在影片剪辑元件 MC 的时间轴第 1 帧的动作面板中添加如下语句:苏州叶亮整理4gotoAndStop(40);load()语句的用法其实很简单,load()语句就是装载的意思,一但程序被激活,load()语句就发生事件,不用点击任何按钮就可以执行程序体,比如,你如果一打开你的 swf格式的影片就想进入新浪主页,那么你就在你的 fla 文件(源文件)的第一帧上编写:load(getURL(“http:/“,“_blank“)这个语句就是说:你发布的 swf 格式的影片或者网页,一旦被打开,那么立即执行程序直接进入新浪主页,
10、并且在另外一个窗口打开新浪主页(_blank 就是在另外一个窗口打开)! (二)Actionscript 的基本语法规则:使用 Actionscript 编写脚本时,如果使用正常模式的动作面板,通过菜单和列表选择选项,可以创建简单的动作。要想用 Actionscript 编写功能强大的脚本,你就必须深入了解和学习 Flash MX 的 Actionscript 脚本语言。像其它脚本语言一样,Actionscript 也有变量、函数、对象、操作符、保留关键字等语言元素,有它自己的语法规则。Actionscript 允许用户创建自己的对象和函数。Actionscript 的语法和风格与 javas
11、cript 非常相似,但不完全相同。 Actionscript 拥有自己的句法和标点符号使用规则,这些规则规定了一些字符和关键字的含义,以及它们的书写顺序。例如,在英语中用句号结束一个句子,而在 Actionscript 中则用分号结束一个语句。下面列出的是 Actionscript 的一些基本语法规则,对于比较比较特别的规则,请参阅Actionscript 词典。1.点语法在 Actionscript 中,点(.)被用来指明与某个对象或电影剪辑相关的属性和方法。它也用标识指向电影剪辑或变量的目标路径。点语法表达式由对象或电影剪辑名开始,接着是一个点,最后是要指定的属性、方法或变量。例如,表达
12、式 ballMC.x 是指电影剪辑实例 ballMC 的 _X 属性,_X 电影剪辑属性指出编辑区中电影剪辑的 X 轴位置。例如,submit 是在电影剪辑 form 中设置的一个变量,而 form 又是嵌套在电影剪辑shoppingCart 中的电影剪辑。表达式 shoppingCart.form.submit=true 的作用是设置实例form 的 submit 变量的值为 true。表达一个对象或电影剪辑的方法遵循相同的模式。例如,ballMC 实例的 play 方法用于移动 ballMC 的时间轴播放头,就像下面的语句:ballMC.play();点语法使用两个特殊的别名:_root
13、和_parent 。别名_root 是指主时间轴。可以使用_root 别名创建一个绝对路径。例如,下面的语句调用主时间轴中电影剪辑 functions 的buildGameBoard 函数:_root.functions.buildGameBoard();Flash MX 允许使用别名 _parent 来引用嵌套当前电影剪辑的电影剪辑。也可以用_parent 创建一个相对目标路径。例如,如果电影剪辑 dog 被嵌套在电影剪辑 animal 之中,那么,在实例 dog 上的下列语句告诉 animal 电影剪辑停止播放: 苏州叶亮整理5_parent.stop();2.斜杠语法Flash 的以前版
14、本是使用斜杠语法指出电影剪辑或变量的目标路径的。Flash MX 播放器仍然支持这种语法,但不推荐使用。在斜杠语法中,斜杠被用来代替点,用以标明电影剪辑或变量的路径。要指出一个变量,可以在变量前加上冒号,如下面的语句所示:myMovieClip/childMovieClip:my variable我们现在用点语法取代上述斜杠语法来表示上面的目标路径:myMovieClip.childMovieClip.myvariable斜杠语法在 tellTarget 动作中使用最为普遍,但这种动作在 Flash MX 中已不再推荐使用。【说明】与其使用 tellTarget 动作还不如使用 with 动作
15、与点语法兼容。 3.大括号Actionscript 语句用大括号() 分块,如下面的脚本所示:on(release)myDate = new Date();currentMonth = myDate.getMonth(); 4.分号Actionscript 语句用分号(;)结束,但如果你省略语句结尾的分号,Flash 仍然可以成功地编译你的脚本。例如,下面的语句用分号结束:colum = passedDate.getDay();row = 0;同样的语句也可以不写分号:colum = passdDate.getDay()row = 05.圆括号定义一个函数时,要把参数放在圆括号中:functi
16、on myfunction (name, age, reader) 调用一个函数时,也要把要传递的参数放在圆括号中:myfunction (“Steve“,10,true);圆括号可以用来改变 Actionscript 的运算优先级,或使自己编写的 Actionscript 语句更容易阅读。也可以用圆括号来计算点语法点左边的表达式。例如,在下面的语句中,圆括号使表达式 new color(this)得到计算,并创建了一个新的颜色对象:苏州叶亮整理6onClipEvent(enterFrame)(new Color(this).setRGB(oxffffff);在上例中,如果不使用圆括号,就需要
17、在代码中增加一个语句来计算它:onClipEvent(enterFrame)myColor = new Color(this);myColor.setRGB(0xffffff); 6.大小写字母在 Actionscript 中,只有关键字区分大小写。对于其余的 Actionscript,可以使用大写或小写字母。例如,下面的语句是等价的:cat.hilite = true;CAT.hilite = true;但是,遵守一致的大小写约定是一个好的习惯。这样,在阅读 Actionscript 代码时更易于区分函数和变量的名字。如果在书写关键字时没有使用正确的大小写,你的脚本将会出现错误。例如下面的两
18、个语句:setProperty(ball,_xscale,scale);setproperty(ball,_xscale,scale); 前一句是正确的,后一句中 property 中的 p 应是大写而没有大写,所以是错误的。在动作面板中启用彩色语法功能时,用正确的大小写书写的关键字用蓝色区别显示,因而很容易发现关键字的拼写错误。7.注释需要记住一个动作的作用时,可在动作面板中使用 comment(注释)语句给帧或按钮动作添加注释。如果你在协作环境中工作或给别人提供范例,添加注释有助于别人对你编写的脚本的正确理解。在动作面板中选择 comment 动作时,字符“ /”被插入到脚本中。如果在你创
19、建脚本时加上注释,即使是较复杂的脚本也易于理解,例如:on(release)/建立新的日期对象myDate = new Date();currentMonth=myDate.getMonth();/把用数字表示的月份转换为用文字表示的月份monthName = calcMoth(currentMonth);year = myDate.getFullYear();currentDate = myDate.getDat();苏州叶亮整理7在脚本窗口中,注释内容用粉红色显示。它们的长度不限,也不影响导出文件的大小。 8. 关键字Actionscript 保留一些单词,专用于与本语言之中。因此,不能用
20、这些保留字作为变量、函数或标签的名字。下表列出了 Actionscript 中所有的关键字:break continue delete elsefor function if innew return this typeofvar void while with【注意】这些关键字都是小写形式,不能写成大写形式。 9.常量常量有其值永不改变的属性。常数用大写字母列于动作工具箱中。例如,常数BACKSPACE、ENTER、 QUOTE、RETURN、SPACE 和 TAB 是 Key 对象的属性,指键盘上的键。要测试用户是否在按 Enter 键,可使用下面的语句:if(keycode()= =ke
21、y.ENTER)alert = “你准备好了吗?“controlMC.gotoAndStop(5);Actionscript 中的术语Actionscript 根据特定的语法规则使用特定的术语。以下按字母顺序介绍重要的Actionscript 术语。Actions(动作):是指导 Flash 电影在播放时执行某些操作的语句。例如,gotoAndStop 动作就可以将播放头转换到指定的帧或帧标记。Action(动作)也可以被称作 statement(语句) 。Arguments(参数):是允许将值传递给函数的占位符。例如,以下语句中的函数welcome 就使用了两个参数 firstName 和
22、hobby 来接收值:function welcome(firstName,hobby) welcomeText = “Heelo,“ + firstName + “I see you enjoy“ + hobby;Classed(类):是各种数据类型。用户可以创建“类” 并定义对象的新类型。要定义对象的类,用户需创建构造器函数。Constants(常量):是不会改变的元素。常量对于值的比较非常有用。Constructors(构造器):是用来定义“类”的属性和方法的函数。以下代码通过创建 Circle 构造器函数生成了一个新的 Circle 类。function Circle(x, y, ra
23、dius) this.x = x;this.y = y;this.radius = radius;苏州叶亮整理8Dat(三)Flash 动作脚本中常用的语句一、play 命令(播放)1、使用格式play()该命令没有参数,功能是使动画从它的当前位置开始放映。二、stop 命令(停止播放)1、使用格式stop()该命令没有参数,功能是停止播放动画,并停在当前帧位置。三、gotoAndPlay 命令(跳至播放)1、使用格式gotoAndPlay(frame)参数说明:frame:跳转到帧的标签名称或帧数。该命令用来控制影片跳转到指定的帧,并开始播放。2、用法举例gotoAndPlay(10)以上动
24、作代码的作用是:让播放头跳转到当前场景的第 10 帧并从该帧开始播放。四、gotoAndStop 命令(跳至停止播放)1、使用格式gotoAndStop(frame)参数说明:frame:跳转到帧的标签名称或帧数。该命令用来控制影片跳转到指定的帧,并停止在该帧。2、用法举例gotoAndStop(10)苏州叶亮整理9以上动作代码的作用是:让播放头跳转到当前场景的第 10 帧并停止在该帧。五、stopAllSounds 命令(停止所有音轨)1、使用格式stopAllSounds()该命令没有参数用来停止当前 FlashPlayer 中播放的所有声音。六、if.else 语句(条件语句)1、使用格
25、式if (条件) 语句 1; else 语句 2;当条件成立时,执行“语句 1”的内容。当条件不成立时,执行“语句 2”的内容。2、用法举例if(ab) /判断 a 是否大于 btrace(“ab“); /若成立,则输出 abelse trace(“b=a“); /若不成立则输出 b=a七、switch.case.default 语句(条件语句)1、使用格式switch (表达式) case 值 1:执行语句 1;break ;case 值 2:执行语句 2;break ;default:语句;先计算表达式的值,然后去各个 case 子句中寻找对应的执行语句。如果找不到对应的执行语句,就执行
26、default 后面的语句。2、用法举例var n:Number = 25;switch (Math.floor(n/10) case 1 :trace(“number=1“);苏州叶亮整理10break;case 2 :trace(“number=2“);break;case 3 :trace(“number=3“);break;default :trace(“number=?“);输出结果:number=2八、while 语句(循环语句)1、使用格式while (条件) 执行的代码块;当“条件”成立时,程序就会一直执行“执行的代码块” ,当“条件”不成立时,则跳过“执行的代码块”并结束循环
27、。2、用法举例var i:Number=10; /定义一个数字型变量 i,并赋初值 10while(i=0) /先判断条件trace(i); /若条件成立,则输出 ii=i-1; /i 自身减 1输出结果:依次输出 10、9、8、7、6、5、4、3、2、1、0九、do.while 语句(循环语句)1、使用格式do 执行的代码块; while (条件)先执行代码块,后判断条件。2、用法举例var i:Number=10;do trace(i); /先执行代码块输出 ii=i-1; while (i=0) /再判断条件输出结果:依次输出 10、9、8、7、6、5、4、3、2、1十、for 语句(循
28、环语句)1、使用格式苏州叶亮整理11for (变量初值;表达式;变量更新表达式) 执行的代码块;2、用法举例对 1100 之间的偶数求和。var i:Number=0;var sum:Number=0;for (i=0;i9) /因为外面这有 9 张图,当变量大于 9 的时候,让变量为 1,这样能够使加载的图片是连续的,即,每点一次按扭,就换一张图,等到换到第 9 张图,再点按扭,则循环到第一张图(j1.jpg 到 j9.jpg,因为没有 j0.jpg,如果 i=0,则会提示没有找到j0.jpg);i=1;loadMovie(“j“+i)+“.jpg“,mymc); /从 j1.jpg 开始加
29、载图片到影片剪辑 mymc 中;mymc._x=110; /以下设置加载图片的属性mymc._y=35;mymc._xscale=130;mymc._yscale=130;苏州叶亮整理23清除按扭上的 AS 代码:on(release)unloadMovie(mymc); /删除掉用 loadMovie 加载到影片剪辑的图片;Ctrl+Enter 测试。当然 AS 代码也可以写在帧上。四)用 mySound.loadSound 调用外部声音文件,加载到场景中外部声音文件必须和正在编辑的 Flash 文件放在同一目录下1.制作两个按扭(一个调用,一个清除)拖放到场景中2.调用按扭上的 AS 代码
30、:on(release) /鼠标离开按扭后执行下面的代码;mySound=new Sound(); /建立一个新的声音对象 mySound;mySound.loadSound(“zaihuni.mp3,true); /加载外部的 *.mp3 声音文件到 mySound 对象中,并且按流的方式播放(参数为 false 时,是以装载完后播放);清除按扭上的 AS 代码: on(release)mySound.stop(); /当按下清除按扭后,停止声音的播放 Ctrl+Enter 测试五)用 loadMovieNum()函数调用所有外部文件()loadMovieNum()函数详解用法:loadMo
31、vieNum(“url“,level , variables)功能:在播放原来加载的 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中的某个级别。参数:该函数有 3 个参数:url、target、variables。variables 是可选参数。1.参数 url:要加载的 SWF 文件或 JPEG 文件的绝对或相对 URL(路径)。该函数的此参数和上面 loadMovie 中的此参数用法完全一致,这里不再作解释。2.参数 level:一个整数,指定 SWF 文件将加载到 Flash Player 中的哪个级别。加载的时候,可以这样来写: loadMov
32、ieNum(“01.swf“, 1);loadMovieNum(“02.swf“, 2);loadMovieNum(“03.swf“, 3);loadMovieNum 加载后的控制可以这样使用: _level1._x=10 ;_level2.aa._alpha=50 ;_level3.aa.bb._width=110;苏州叶亮整理24_level4.mysound.stop(); /加载到级别为 4 的对象 MC:mysound 停止(播放音乐)需要注意的的是,每一个级别只能同时存在一个 SWF 或 JPEG 文件。如果两个 SWF 或 JPEG 文件的级别相同,那么后者将替换掉前者。级别不同
33、的_level,级别大的将覆盖掉级别小的,即:数字大的将处于数字小的之上(如上例:03.swf 处在 02.swf 和01.swf 上方,02.swf 处在 01.swf 上方) 。注意:如果将 SWF 文件加载到级别 0,则 Flash Player 中的每个级别均被卸载,并且级别 0 将替换为该新文件。处于级别 0 的 SWF 文件为所有其它加载的 SWF 文件设置帧频、背景色和帧大小。如: loadMovieNum(“00.swf“, 0); /以下均不显示,这样只有一个 00.swfloadMovieNum(“01.swf“, 1);loadMovieNum(“02.swf“, 2);
34、loadMovieNum(“03.swf“, 3); 3.参数 variables:可选参数,指定发送变量所使用的 HTTP 方法。该参数必须是字符串 GET 或 POST。如果没有要发送的变量,则省略此参数。GET 方法将变量追加到 URL 的末尾,它用于发送少量的变量。POST 方法在单独的 HTTP 标头中发送变量,它用于发送大量的变量。()loadMovieNum()的卸载外部文件调用使用 unloadMovieNum() 可删除用 loadMovieNum() 加载的 SWF 文件或图像。用法: unloadMovieNum(level)参数: level 所加载影片的级别 (_le
35、velN)。如: on(release)unloadMovieNum (1200); /如下:unloadMovieNum (_level1200);不能卸载loadMovieNum (“sje.swf“,1200)()loadMovieNum()的定位从前面我们已经知道了,函数 loadMovieNum 是将 SWF 或 JPEG 文件加载到_level(级别)的。并且是用_level1._x、_level2._x、_level1.aa._x 之类的来定位的。比如我们要将 02.swf 加载到主场景坐标系的(50,100)中,代码如下:loadMovieNum (“02.swf“,1); /
36、极有可能不能如愿定位_level1. _x = 50 ;_level1. _y = 100 ;但是在测试的时候大家会发现加载进来的 02.swf 并没有如我们预期的那样出现在主场景坐标系的(50,100)位置,这是为什么呢? 苏州叶亮整理25原来,在没有使用 loadMovieNum 以前,所有的图形、MC 等等都是处于_level0 里的,我们通常使用的_root 其实就是_level0。你可以作个测试:trace(_root=_level0),你会发现返回值是“true“。那么,我们用 loadMovieNum 加载 SWF 或 JPEG 文件的时候,程序就要对你指定的_level 进行创
37、建,随后再紧接着载入 SWF 或 JPEG 文件。如果像刚才代码中写的那样,不判断_level 是否存在而调用其属性,势必无功而反。解决的方法也很简单,就是用一个循环来判断指定的_level 是否存在。一旦_level产生,那么它的种种属性自然可以调用了。代码如下:loadMovieNum (“02.swf“,1); /如愿定位onEnterFrame = function () if ( _level1 ) with ( _level1 ) _x = 50 ;_y = 100 ;delete onEnterFrame ;或者:(上面的代码较好些) loadMovieNum (“02.swf“
38、,1);function go () if ( _level1 ) with ( _level1 ) _x = 50 ;_y = 100 ;clearInterval ( fps ); /清除对 setInterval() 的调用fps = setInterval ( go,100 ); /每隔一定的时间,就调用函数、方法或对象再或者大家可以使用 Macromedia Flash MX 2004 中的 MovieClipLoader 类来判断加载状态。 注意:深度 depth 值越大,其加载的内容越往后,即越在下层,处于下方,被遮盖;这与级别标识符_levelN 相反,在_levelN 中 N
39、 值越大,其加载的内容越往前,即越在上层,处于上方。()小技巧:用 loadMovieNum()保护你的作品使用虚假的文件后缀其实加载外部文件的扩展名不一定非得以 .swf 命名,虽然加载的影片也在 IE 的临时文件夹中,但已是自定义的文件格式了,这样可以起到保护作用。例如: 苏州叶亮整理26loadMovieNum(“feng.exe“,0);/加载 feng.swf 将扩展名改为 feng.exe 加载/*loadMovieNum(“feng.txt“,0); /加载 feng.swf 将扩展名改为 feng.txt 加载loadMovieNum(“feng.doc“,0); /加载 feng.swf 将扩展名改为 feng.doc 加载loadMovieNum(“feng.abcde“,0); /加载 feng.swf 将扩展名改为 feng.abcde 加载loadMovieNum(“feng“,0); /加载 feng.swf 将扩展名删除 feng 加载*/