版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章最简单的ActionScript程序设计3.1认识函数函数在编程中必不可少,Flash中有一些非常简单的函数,如:Stop();它的作用是停止当前正在播放的SWF文件,其中stop代表函数的标识符,即函数的名称。()表示运算符,所有函数都有如下格式。函数名();例如:nextFrame();这个函数表示将播放头转到下一帧。有很多函数在()中还必须加入一些参数,例如:gotoAndStop(8);其中8为函数的参数,表示将播放头转到当前场景中的第八帧并停止播放。函数中的参数可以是多个,参数与参数之间用逗号隔开,如:Math.atan2(y,x);此函数表示以弧度为单位计算并返回y/x的反正切值。3.1.2自定义函数Flash内置的函数有限,所以要实现的功能也有限,要扩展函数的功能,就要自定义函数。用关键字function实现自定义函数。格式如下:function函数名(){//代码}当函数定义好以后,只需用如下方式调用函数:函数名();范例3-1:编写一个自定义函数,实现指定帧的跳转功能(1)新建一个Flash文档。并创建一个影片剪辑,在此影片剪辑中制作一个简单的补间动画。(2)回到主场景,把该影片剪辑拖到主场景中,并命名为mc。(3)在主场景中新建一层,并输入下列代码:FunctionmcToFrame(){mc.gotoAndStop(20);}//自定义函数mcToFrame();//调用函数(4)测试影片,可以看到主场景中的影片剪辑实例停在第20帧。为了使函数适用于所有的影片剪辑实例,函数中应建立一个数据类型为MoiveClip的变量,用来代表影片剪辑的实例名。如下:functionmcToFrame(obj:MovieClip){obj.gotoAndStop(20);}此函数中,obj代表影片剪辑的实例名,是函数的参数,必须放在括号中。此函数这样调用:mcToFrame(mc);这个函数已经可以用于所有的影片剪辑实例,但还有一个不好的地方,就是不能被用户指定要跳转的帧数,所以还可修改为:functionmcToFrame(obj:MovieClip,frameNum:Number){obj.gotoAndStop(frameNum);}此函数中,增加一个变量frameNum用来代表要跳转的帧数,如果要使mc跳转到第20帧,可以这样调用:mcToFrame(mc.20);同样,要使影片剪辑实例mc1跳转到第五帧,就可以使用此函数,这样调用:mcToFrame(mc1.5);3.2程序的三种基本结构3.2.1顺序结构顺序结构的程序是按顺序执行的,从程序开头一直执行到结尾。只执行一次。这种按照语句的排列方式逐句执行的方式,称为顺序结构。Flash中的程序可以放到帧中,而帧是可以循环播放的,当播放到某帧,帧中的代码就会按照顺序执行一次,所以一个顺序结构的程序在Flash中利用帧的循环可多次执行,但在运行到某帧时只执行一次。范例3-2:不断旋转的指针(1)新建一个Flash文档。(2)在主场景中画一条水平的直线,并把该直线转换为影片剪辑元件。把注册点放在直线的左端。(3)选中直线,把实例名取名为“line”。(4)新建一层,选中此层的第一帧,输入如下代码:line._rotation+=5(5)测试影片,直线按顺时针方向转动了5度。(6)把主场景中的两层都插入一帧,测试影片,发现直线不断的旋转。3.2.2选择结构在选择结构程序中,有一个条件,当条件为真时,执行一段代码,否则的话,执行另一段代码。例如:vara=true;varb=3;if(a){b*=3;}else{b/=3;}trace(b);这段程序中,因为a为真,所以只执行b*=3,b等于9,程序中的b/=3跳过,最后执行trace(b),输出9。3.2.3循环结构循环结构程序最主要的特点是有一个重复执行程序的过程,当条件为真时,反复执行程序,一直到条件为假时停止。范例3-3:让影片剪辑横向均匀排列(1)新建一个Flash文档(2)在场景建立五个影片剪辑实例,实例名分别设置为mc1、mc2、mc3、mc4、mc5(3)选中第一帧,打开“动作”面板,输入下列代码:varnum=5;while(num>0){ _root["mc"+num]._y=200; _root["mc"+num]._x=mc1._x+num*mc1._width; num--;}(4)测试影片。3.3事件和事件处理事件是指软件或硬件发生的事情,它需要Flash应用程序对这些事件有一定的相应。硬件发生的事件如按下键盘、单击鼠标、移动鼠标等,软件发生的事件如影片剪辑刚刚被载入场景,影片剪辑被卸载等。为了使应用程序能够对事件做出反应,必须使用事件处理函数。如单击按钮时,可以停止影片的播放等。范例3-4:用按钮控制物体的移动(1)新建一个Flash文档,并在场景中建立一个影片剪辑实例,实例名设置为ball。(2)单击按钮,打开动作面板,输入下列代码:on(keyPress"<Left>"){ ball._x-=10;}(3)测试影片,按住左方向键不放,观看影片剪辑实例的运动。按下方向键就是一个事件,当这个事件发生时,程序会对这个事件进行出理,让场景中的影片剪辑实例的x坐标不断减少,形成移动的效果。Flash中的事件包括用户事件和系统事件两类。用户事件是指用户直接与计算机交互操作而产生的事件,例如单击或按下键盘键等事件。系统事件是指FlashPlayer自动生成的事件,它不是由用户生成的,例如影片剪辑在舞台上第一次出现或播放头经过某个关键帧等。一般情况下,在以下几种情况下会产生事件。1当在时间轴上播放到某一帧时。2当载入或卸载某个影片剪辑时。3当单击某个按钮或按下键盘上的某个键时。为了使应用程序能够对事件做出反应,必须编写相应的事件处理程序。事件处理程序是与特定对象和事件关联的动作脚本代码。FlashMX2004提供了三种编写事件处理程序的方法。1)针对对象的on()事件和onClipEvent()事件处理函数2)事件处理函数方法3)事件侦听器下面就以第一种方法的事件为例,讲解这种编写事件处理程序方法的应用。1、on()事件处理函数on()事件处理函数是最传统的事件处理方法。它一般直接作用于按钮实例,也可以作用于影片剪辑实例。on()函数的一般形式为:on(鼠标事件){//程序,这些程序组成的函数体响应鼠标事件}其中鼠标事件是“事件”触发器,当发生此事件时,执行事件后面大括号中的程序。按钮可以响应鼠标事件,还可以响应KeyPress(按键)事件。对于按钮而言,可指定触发动作的按钮时间有八种。1、press:事件发生于鼠标指针在按钮上方,并按下鼠标左键时。2、release:事件发生于按钮上方按下鼠标左键,接着松开鼠标左键时,也就是“单击”。releaseOutside:事件发生于在按钮上方按下鼠标左键,接着把鼠标指针移到按钮之外,然后松开鼠标左键时。rollover:事件发生于鼠标指针滑入按钮时。rollOut:事件发生于鼠标指针滑出按钮时。dragOver:事件发生于按着鼠标左键不放,鼠标指针滑入按钮时。dragOut:事件发生于按着鼠标左键不放,鼠标指针滑出按钮时。keyPress:事件发生于用户按下指定的按键时。范例3-5:制作动感菜单(1)新建一个Flash文档。(2)在场景中建立一个按钮实例,单击按钮实例,打开“动作”面板,输入下列代码:on(rollOver){ _parent.menu.stop();}//当鼠标指针在按钮实例的范围之内时,让主场景中的影片剪辑实例停止播放on(rollOut){ _parent.menu.play();}//当鼠标指针离开按钮实例时,让主场景中的影片剪辑实例又开始播放(3)按住Ctrl键不放,用鼠标拖动复制出七个按钮实例,选中全部按钮实例,调出“对齐”面板,分别单击对齐面板上的“上对齐”和“水平居中分布”按钮。(4)保持按钮元件实例的选中状态,按F8键转换为影片剪辑元件,并在“属性”面板中把实例名设置为menu。双击该影片剪辑实例,进入到元件的编辑状态,创建一个补间动画。(5)测试影片,可看到菜单不断运动,将鼠标指针移向按钮,菜单停止运动,鼠标指针离开按钮,菜单又开始运动。如果想让菜单链接到网页上,可以在按钮实例上加上:on(release){getURL(“”);}范例3-6:创建具有按钮状态的影片剪辑(1)新建一个Flash文档。(2)在场景中制作一个影片剪辑实例,双击此实例进入元件的编辑场景,选中第一帧,打开属性面板,设置帧标签为“_up”。(3)分别在第二帧和第三帧插入一关键帧,帧标签分别为_over和_down,同时修改场景中的图形。(4)返回主场景,单击实例,打开“动作”面板,输入下列代码:on(release){ trace("这是一个影片剪辑实例");}(5)测试影片。2、OnClipEvent()事件处理函数OnClipEvent()事件处理函数与on()事件处理函数不同,它只能作用于影片剪辑实例,相关的代码放在影片剪辑实例的“动作”面板中。onClipEvent()函数的一般形式为onClipEvent(事件名称){//程序}编写程序时,Flash会自动提示onClipEvent()的事件名称,对于影片剪辑而言,可指定的触发事件有9种,分别如下:1、load:影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作。范例3-7:认识load事件(1)新建一个Flash文档(2)在场景中建一个影片剪辑实例,选中该实例,打开“动作”面板,输入下列代码:onClipEvent(load){trace(“发生了load事件”);}(3)测试影片,在“输出”面板中可以看到输出的信息,只有一次。(4)返回主场景,在第二帧插入一帧,让其循环,测试影片,虽然帧不断的循环播放,但输出的信息也只有一次。(5)返回主场景,在第二帧插入一空白关键帧,让其循环播放,测试影片,将看到信息不断出现。通过测试可以看出,当影片剪辑实例出现在时间轴上时,load事件发生,当实例在事件轴上消失又重新出现时,也会发生load事件。2、unload:在时间轴中删除影片剪辑之后,此动作在第一帧中启动。在向受影响的帧附加任何动作以前,先处理与unload影片剪辑事件关联的动作。Unload事件与load事件刚好相反,当影片剪辑实例在时间轴上消失时才会发生。在范例3-7的基础上,执行以下操作。(1)打开影片剪辑实例的“动作”面板,把代码改为onClipEvent(load){trace(“发生了load事件”);}onClipEvent(unload){trace(“发生了unload事件”);}(2)移出第2帧上的空白关键帧,在第20帧插入帧,在第21帧插入一空白关键帧,在第40帧插入帧。(3)测试影片当影片剪辑实例出现在第一帧时,发生load事件,播放到第21帧,实例消失,发生unload事件,帧继续播放,重复以上过程,间隔的发生load事件和unload事件。3、enterFrame:以影片剪辑帧频不断触发的动作。首先处理与enterFrame影片剪辑事件关联的动作,然后才处理附加到受影响帧的所有帧动作。enterFrame事件其实是一个不断执行的程序,执行的速度取决于帧频,Flash中默认的帧频是12fbs,表示播放12帧需1秒的时间,利用这个原理,可以制作一个简单的计时器。范例3-8:用enterFrame事件制作计时器(1)新建一个Flash文档(2)选择“修改”“文档”命令,在弹出的“文档属性”对话框中把帧频设为12,(3)在场景中建立一个动态文本,并在“属性”面板中把变量名设置为time。(4)单击“动态文本”,转换为影片剪辑元件,选中影片剪辑实例,打开“动作”面板,输入下列代码:onClipEvent(load){ vartime=0; //代表时间 varrate=12; //代表flash的帧频 vartemp=0; //临时变量}onClipEvent(enterFrame){ temp+=1; //程序每执行一次,temp加1 time=Math.round(temp/rate*100)/100; //把temp除以帧频,并保留两位小数}测试影片,观看显示的时间。4、mouseMove:每次移动鼠标指针时启动此动作。_xmouse和_ymouse属性用于确定当前鼠标指针位置。5、mouseDown:当按下鼠标左键时启动此动作。6、mouseUp:当释放鼠标左键时启动此动作。对于这三个鼠标相应的事件,要注意按钮中的鼠标事件的区别,前者在影片的任何位置都能触发事件,后者一定要单击按钮区域才会触发事件。范例3-9:制作简单的Flash涂鸦板(1)新建一个Flash文档,创建一个影片剪辑元件,单击确定按钮。(2)返回主场景,从“库”面板中拖出影片剪辑元件,创建一个空的影片剪辑实例。选中场景中的空影片剪辑实例,打开“动作”面板,输入下列代码:onClipEvent(mouseMove){ if(myDraw){ _root.lineStyle(0,0x000000,100);//定义线条的粗细为0磅,颜色为0x000000,透明度为100 _root.lineTo(_root._xmouse,_root._ymouse);//画线的终点为鼠标指针的坐标 }}//当鼠标移动时,沿鼠标位置不断画线onClipEvent(mouseDown){ myDraw=true; _root.moveTo(_root._xmouse,_root._ymouse);}//鼠标按下时myDraw为真,并在鼠标位置定义画线的起点onClipEvent(mouseUp){ myDraw=false;}//当鼠标释放时,myDraw为假,停止画线(3)测试影片使用画线函moveTo()和lineTo(),只需在函数中加入参数,如moveTo(x1,y1)代表从点(x1,y1)处开始画线。lineTo(x2,y2)代表画线的终点是(x2,y2)。使用这两个函数之前必须,先用lineStyle()函数定义画线的样式。7、keyDown:当按下某个键时启动此动作。8、keyUp:当释放某个键时启动次动作。范例3-10:旋转的箭头(1)新建一个Flash文档(2)在场景中“直线工具”绘制箭头。(3)选中全部线条线条,将其转换为影片剪辑元件,把注册点放在下方。(4)选中场景中的影片剪辑实例,打开“动作”面板,输入下列代码:onClipEvent(keyDown){ if(Key.getCode()==90){ _rotation-=6; } //如果按下“z”键,炮塔向左旋转6度 if(Key.getCode()==88){ _rotation+=6; } //如果按下“x”键,炮塔向右旋转6度}(5)测试影片。本范例程序代码中的Key.getCode()获得按键的键值,其中z键的键值为90,x键的键值为88。onClipEvent(keyUp){ trace(Key.getCode()); //如果按键被释放,输出按键的键值}测试影片,按任意键,可在“输出”面板中输出相应的键值。data:当在loadVariables()或loadMoive()动作中接收数据时启动此动作。3.4常用函数3.4.1时间轴控制函数1、play()与stop()播放与停止当前播放的swf文件使用方法:路径.play();路径.stop();如果要主场景中的实例名为ball的影片剪辑实例播放,可以下列的程序代码:_root.ball.stop();2、gotoAndPlay()与gotoAndStop()gotoAndPlay()的功能是,将播放头转到场景中指定的帧并从该帧开始播放。gotoAndStop()的功能是,将播放头转到场景中指定的帧并停止。如果未指定场景,则播放头将转到当前场景中的指定帧。比如:gotoAndPlay(10);这个代码的功能是,将播放头转到第10帧并从该帧开始播放。prevFrame()与nextFrame()将播放头转到上一帧或下一帧并停止。比如:on(release){nextFrame();}这段程序代码的功能是,当用户单击按钮时,播放头转到下一帧并停下来。注:类似的,prevScene()和nextScene()表示将播放头移到上一场景或下一场景的第一帧开始播放。3.4.2duplicateMovieClip()函数与removeMovieClip()函数duplicateMovieClip()函数的作用是通过复制创建新的影片剪辑的实例。在Flash作品中常见的倾盆大雨、雪花飘飘、繁星点点等动画特效,就是利用duplicateMovieClip()函数的功能来实现的。duplicateMovieClip()函数的一般形式为duplicateMovieClip(目标,新实例名,深度);其中有三个参数:目标:被复制的影片剪辑的名称和路径。新实例名称:被复制后得到的影片剪辑实例名称。深度:深度代表影片剪辑在影片中的叠放次序,较低深度的影片剪辑实例在较高深度的影片剪辑的实例之下。如果复制出多个影片剪辑实例,要为每个影片剪辑实例指定唯一的深度值,如果有两个实例的深度相同,后面复制产生的实例将覆盖前面的实例。在使用duplicateMovieClip()函数时,要注意以下几点1、复制得到的影片剪辑会保持父级影片剪辑原来的所有属性,所以,原来的影片剪辑是静止的,复制后的影片剪辑也是静止的。并且一个叠放在另一个上。如果不给他们设置不同坐标,就只能看到编号最大的影片剪辑复本,而看不出复制的效果。2、原来的影片剪辑在做补间运动,那么复制品也要做同样的运动,并且无论播放头在原始影片剪辑中处于什么位置,复制的影片剪辑播放头始终从第一帧开始。所以复制品和原影片剪辑始终有个时间差,因此即使不给复制的影片剪辑设置坐标,也可以看到复制品在运动。3、复制得到的影片剪辑实例经常要与影片剪辑的属性控制(特别是_x,_y,_xscale,_yscale,_alpha,_rotation等属性的控制)结合才能发挥复制效果。范例3-11:复制一个影片剪辑实例(1)新建一个文档,在场景中设置一个影片剪辑实例,名称为ball。(2)在第一帧中加入如下代码:duplicateMovieClip(“ball”,”ball2”,1)//复制一个实例名为ball2的影片剪辑实例,深度为1(3)测试影片,影片中可以看到新实例ball2,但看不到旧实例ball1,原因是新的实例和旧的实例的属性完全一样,包括他们的坐标、缩放度等,并且复制产生的实例的深度要比旧实例要高,所以ball2叠在了实例ball1的上面。要使两个实例都可见,必须修改一个实例的属性,在第二行代码中加入ball2._x=ball._x+50测试影片。实例ball2的深度是在复制实例时指定的,为1。实例ball1的深度是最低的,深度的范围是-16384到2130690045,任何Flash对象都不会超出这个范围。范例3-12:复制2个影片剪辑实例(1)这个影片的第一帧上加入下列代码:duplicateMovieClip("ball1","ball2",1);duplicateMovieClip("ball1","ball3",1);ball2._x=ball1._x+50*1;ball3._x=ball1._x+50*2;在影片中只有一个实例被复制出来,原因是ball2和ball3的深度是一样的,实例ball2被实例ball3覆盖。把第二行代码改为duplicateMovieClip("ball1","ball3",2);要复制10个或者更多的影片剪辑实例,不要写10行或者更过代码,通过“+”运算符、循环语句和动态路径可实现程序的简化。范例3-13:复制多个影片剪辑实例这个影片的第一帧的代码如下:vari=2;varnum=10;while(i<num){ duplicateMovieClip("ball1","ball"+i,i-1); this["ball"+i]._x=ball1._x+50*(i-1); this["ball"+i].insName=this["ball"+i]._name; this["ball"+i].dep=this["ball"+i].getDepth(); i++;}ball1.insName=ball1._name;ball1.dep=ball1.getDepth();通过duplicateMoiveClip()函数产生的实例可通过removeMovieClip()函数进行删除。removeMovieClip()的一般形式为:removeMovieClip(实例名)范例:雪花飘飘3.4.3startDrag()函数与stopDrag()函数startDrag()函数的作用是使影片剪辑实例在影片播放过程中可以拖动。startDrag()函数的一般形式为:startDrag(target,[lock,left,top,right,bottom]);target表示要拖动的影片剪辑的目标路径。Lock是一个布尔值,指定可拖动影片剪辑是锁定到鼠标指针位置中央(true),还是锁定到用户首次单击该影片剪辑的位置上(false)。此参数是可选的。Left、top、right、bottom这四个参数分别设置影片剪辑拖动的左、上、右、下的范围,注意相对于影片剪辑父级坐标的值,这些值指定该影片剪辑被约束的矩形。这些参数是可选的。范例3-14:自定义鼠标指针(1)新建一个Flash文档(2)在主场景中画一箭头,转换为影片剪辑元件,注册点在箭头的中间命名为arrow。(3)单击主场景的第一帧,加入如下代码:startDrag(arrow,true);(4)测试影片。3-15:制作任意拖动的拖动条(1)新建一个Flash文档。(2)在主场景中制作一个实例名为btn的按钮实例,单击按钮实例,打开“动作”面板,输入下列代码:on(press){ startDrag(btn);}//当按下鼠标时,拖动按钮on(release){ stopDrag();}//当释放按钮时,停止拖动按钮(3)在场景中制作一个实例名为ball的影片剪辑实例,单击此实例,打开“动作”面板,输入下列代码:onClipEvent(enterFrame){ this._x=_root.btn._x;}//ball的x坐标等于按钮的x坐标(4)测试影片,任意拖动影片中的按钮,观看影片剪辑实例的运动。范例3-16:制作水平拖动的拖动条(1)新建一个Flash文档(2)在主场景建一个实例名为ball的影片剪辑实例。(3)在主场景中建立一个按钮实例,选中该实例,打开“动作”面板,输入下列代码:on(press){ startDrag(this,false,left,top,right,bottom);}//设置拖动的范围,按下鼠标时拖动按钮。on(release){ stopDrag();}//当释放按钮时,停止拖动按钮(4)选中主场景中的按钮,转换为影片剪辑元件,单击此实例,打开“动作”面板,输入下列代码:onClipEvent(load){ top=_y; bottom=_y;//上、下的坐标相同,只能左右拖动 left=_x; right=_x+100;//左右拖动的范围,当前的x坐标到当前的x坐标加100}onClipEvent(enterFrame
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国汽车养护行业资本规划与股权融资战略制定与实施研究报告
- 新形势下铜板带箔材行业转型升级战略制定与实施研究报告
- 2025-2030年中国预应力混凝土用钢材行业资本规划与股权融资战略制定与实施研究报告
- 暴力行为的防范及处置措施2
- 农副产品综合批发市场项目可行性研究报告申请备案
- AG玻璃项目可行性研究申请报告
- 高端卫浴知识培训课件
- 浙江省杭州市余杭区2023-2024学年五年级上学期英语期末试卷(1月)
- 宁夏银川一中、昆明一中2023届高三联合二模考试数学(文)试题 附答案
- 年产9000万平方米瓦楞纸板项目可行性研究报告模板-立项拿地
- 2024年06月上海广发银行上海分行社会招考(622)笔试历年参考题库附带答案详解
- TSG 51-2023 起重机械安全技术规程 含2024年第1号修改单
- 计算机科学导论
- 浙江省杭州市钱塘区2023-2024学年四年级上学期英语期末试卷
- 《工程勘察设计收费标准》(2002年修订本)
- 2024年一级消防工程师《消防安全技术综合能力》考试真题及答案解析
- 2024-2025学年六上科学期末综合检测卷(含答案)
- 安徽省森林抚育技术导则
- 2023七年级英语下册 Unit 3 How do you get to school Section A 第1课时(1a-2e)教案 (新版)人教新目标版
- 泌尿科主任述职报告
- 2024年湖南省公务员考试《行测》真题及答案解析
评论
0/150
提交评论