1 / 76

2D 动画脚本语言设计

多媒体设计与制作专业教研室 王正友. 2D 动画脚本语言设计. 模块 04 拓展 (情境 05-08 ). 能力(技能)目标 1 .具有检测两个物体或目标是否重叠和相交形的能力。 2 .掌握播放动画的时,每隔一定时间就调用函数的方法。 3 .掌握外部的 SWF 文件或 JPEG 文件加载到 Flash Player 的能力。 4 . 掌握数组操作, 将元素添加到数组的结尾, 删除 数组中元素 。 知识目标 1 .碰撞检测函数 hitTest 。 2 .数组元素添加与删除 Array.push() 、 Array.splice() 。

autumn-tate
Télécharger la présentation

2D 动画脚本语言设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 多媒体设计与制作专业教研室 王正友 2D动画脚本语言设计

  2. 模块04 拓展(情境05-08) • 能力(技能)目标 1.具有检测两个物体或目标是否重叠和相交形的能力。 2.掌握播放动画的时,每隔一定时间就调用函数的方法。 3.掌握外部的SWF文件或JPEG文件加载到Flash Player的能力。 4 .掌握数组操作,将元素添加到数组的结尾,删除数组中元素。 • 知识目标 1.碰撞检测函数hitTest。 2.数组元素添加与删除 Array.push()、 Array.splice()。 3.间隔调用函数setInterval、clearInterval。 4.加载外部影片loadMovie。 5.加载外部文本或mp3文件loadVariables。 sppc

  3. 情境05 碰撞检测—hitTest函数—智力小测试 动画演示(源文件4-5-2.fla) 知识点:①碰撞检测—hitTest、②数组元素添加与删除 sppc

  4. 脚本语言 hitTest 碰撞检测命令 hitTest语句在Flash游戏的运用中是必须的,比如在做点鞭炮、射击等的动画时,就可以用hitTest的方法,在Flash网站中实现某些效果时也会经常用到。最常见的例子是用他来实现二级菜单。hitTest是用来检测两个物体是否有重合的地方,或者检测某一个具体的坐标值是否在一个物体身上的语句。 1、使用格式(2种形式) 1)Mc.hitTest(x,y,true/false) 2)Mc.hitTest(target) 参数说明 1)第1种格式中,判断一个具体的坐标值是否在一个物体身上。 影片剪辑mc和由x,y指定的点击区域重叠或交叉,则执行(大括号中)命令。参数true是指mc的整个实际形状;false是指包含影片剪辑mc的矩形边框。 2)第2种格式中,判断两个物体是否重合,即是否同另一个交叉(即冲突检测)。 影片剪辑mc与target的目标路径指定的实例交叉或重叠。target 参数通常表示带路径的实例名。 两个语句被执行后,都会返回一个布尔值。如果碰触到(有重合的地方),则返回true。如果没有碰触到(没有重合的地方),则返回false。所以,我们经常遇到的状况是,将碰撞检测语句和if判断语句联合使用。 sppc

  5. 脚本语言 • 2、用法举例 • 1)拖拽碰撞、鼠标位置碰撞检测 • 首先在舞台上制作两个影片剪辑,一个是圆,一个是方,一个动态文本,圆的实例名为yuan,方的实例名为fang,动态文本的实例名为aText。 • 在舞台中放置圆这2个影片剪辑和动态文本,在第一帧输入如下的脚本: • _root.onEnterFrame = function() { • _root.yuan.startDrag(true); • if (_root.yuan.hitTest(_root.fang)) { • aText.text = "亲到了 "; • } else { • aText.text = "没有亲到 "; • } • if (fang.hitTest(_root._xmouse, _root._ymouse, true)) { • aText.text=“你亲到了我”; 效果文件:亲.fla • } • }; • 按ctrl+Enter测试影片,我们会发现,一旦我们用鼠标碰触到了舞台上的方,输出面板里面就会显示出一句“亲到了”,一当鼠标进入方的内部,就会显示出一句"你亲到了我"。 sppc

  6. 脚本语言 • 2)鼠标控制影片剪辑移动 • 首先在舞台上制作1个球影片剪辑,实例名为qiu_mc ,鼠标在(坐标_xmouse, _ymouse)影片剪辑qiu_mc上(与qiu_mc重叠或交叉)时,qiu_mc向右移动10个象素。 • 在第一帧输入如下的脚本:qiu_mc执行onEnterFrame事件处理函数 • qiu_mc.onEnterFrame = function() { • if (this.hitTest(_xmouse, _ymouse, false)) { • //如果鼠标坐标与qiu_mc交叉或重叠 • (鼠标在qiu_mc上) • this._x += 10; //qiu_mc横坐标增加10个象素; • } • if (this._x>=500) {//qiu_mc横坐标大于或者等 • 于500个象素时 • this._x = 0; //重新设置qiu_mc横坐标为0; • } 效果文件 4-5.fla • }; • 注意,把碰撞函数中的参数false改为true,观测不同效果,加深对mc的形状与边框的理解。 sppc

  7. 脚本语言 3)拖拽碰撞变色 两个影片剪辑,一个是圆,一个是方,圆的实例名为yuan,方的实例名为fang,圆碰到方后就变个颜色。回到舞台中,在影片剪辑第一帧,按F9打开动作面板,键入如下的脚本: _root.onEnterFrame = function() { yuancolor = new Color(_root.yuan); yuancolor2 = yuancolor.getRGB(_root.yuan).toString(16); 效果文件4-5-1.fla _root.yuan.startDrag(true); if (_root.yuan.hitTest(_root.fang)) { yuancolor.setRGB(0xffff00); } else { yuancolor.setRGB(yuancolor2); } updateAfterEvent(); }; 按ctrl+Enter测试影片,我们会发现,一旦我们拖曳圆并碰触到了舞台上的方,则圆就变色。 sppc

  8. 脚本语言 将一个或多个元素添加到数组的结尾,并返回该数组的新长度 1、使用格式 Array.push(); 2、用法举例 var myarray:Array = new Array(5, 8, "a"); var c = myarray.push("b", "c"); trace("添加元素后数组的长度是:"+c); //添加元素后数组的长度是:5 trace("添加元素后的数组:"+myarray); //添加元素后的数组:5,8,a,b,c 提取数组中的一部分,并将该部分作为新数组返回 1、使用格式 Array.splice() 2、用法举例 var myarray:Array=[1,2,3,4,5]; myarray.splice(1,1); //删除第二个数2,下标为1 trace(myarray); //输出结果是: 1,3,4,5; myarray.splice(1,2); trace(myarray); //输出结果是: 1,4,5; sppc

  9. 交互分析 本例中,要把圆等6个图形拖到上面对应的文字上。6个图形分别是tx1_mc~tx6_mc;6个对应的文字都是动态文本,名称分别是wz1~wz6,每个mc拖动的位置如果出错了能够自动回到原来的位置,当6个mc都能正确拖到对应位置上时,主时间轴从第1帧跳到第2帧,并给于文字说明。 显然,我们只要在一个mc上的脚本写对了,其它5个mc就可以很方便的写出来,只要把其中的wz1改为相应的wz2~wz6即可。 动画演示(源文件4-5-2.fla) sppc

  10. 添加脚本 • 方法1、非函数方法求解 • 在主时间轴第1帧上写的脚本: • stop(); • i=0;//设置用于记数的变量 • 在圆(tx1_mc)上的脚本为: • on (press) { //鼠标按下时 • x = _x; //把本mc的坐标赋给本mc下的变量x,y • y = _y; • startDrag(this, true); //拖动这个mc • } • on (release) { //松开鼠标时 • stopDrag(); //停止拖动这个mc • if (this.hitTest(_root.wz1)) { //如果这个mc和动态文本wz1重叠或相交; • if (k != 1) { //这时如果这个mc上的变量k不为1 • _root.i++; //主时间轴上的变量i加1; • k = 1; • //在这个mc上设置变量k=1(使一个mc拖动正确时,主时间轴上的记数变量i只加1次) • } sppc

  11. 添加脚本 • if(_root.i==6){ //如果主时间轴上的记数变量i等于6时(图形都正确拖动完毕) • _root.nextFrame(); //主时间轴跳到下1帧停下; • } • } else { //如果这个mc和动态文本wz1不重叠或相交 • _x = x; //把这个mc的坐标设置为前面得到的这个mc的坐标的数值 • _y = y; • } • } • 我们可以检测这段代码的正确性,然后把这段代码复制在其他5个mc上,只要把其中的wz1改为相应的wz2~wz6即可。 • 方法2、函数方法求解 • 既然这六个mc上的代码都非常接近,我们应该想办法用函数的办法来处理。这六个mc上的代码中只有拖动的mc不同以及检测的文本不同,因此,这个自定义函数应该有两个参数。 sppc

  12. 添加脚本 • 在主时间轴第1帧上加上如下代码: • stop(); • i = 0; • function stlx(md, mc) { //md为拖动的mc,mc为检测的文本 • stopDrag(); • if (md.hitTest(mc)) { • if (md.k!=1) { //变量k是md上的,因此这里写成md.k • i++;//自定义函数是写在主时间轴上,因此主时间轴上的变量可以不用写路径 • md.k = 1; • } • if (i == 6) { • nextFrame(); • } • } else { • md._x = md.x; • md._y = md.y; • } • } sppc

  13. 添加脚本 • 在mc上的代码就可以大为简化 • 在圆(tx1_mc)上的代码就可以写成: • on (press) { • x = _x; • y = _y; • startDrag(this, true); • } • on (release) { • _root.stlx(this, _root.wz1); • //是在mc上写的调函数脚本,因此这里的stlx()和wz1都应该加上路径。 • } • 把tx1_mc上的代码复制到其它5个mc上,只把其中的wz1换成wz2~~wz6就行了。 • 为了可以重复做这个练习,在主时间轴第2帧上加上一个按扭,在按扭上加上: • on (release) { • prevFrame(); //回到第1帧 • } sppc

  14. 上机实验二十二 源文件4-5-2.fla、效果文件4-5-3.swf 1、用事件处理函数改造4-5-2中的源文件,要求: (1)脚本都写在主时间轴的第1帧上,所有mc上都不写脚本; (2)注意使用onPress,onRelease处理函数及循环语句。 sppc

  15. 上机实验二十二 源文件4-5-1.fla、效果文件4-5-4.swf 改造4-5-1中的源文件,把上面的文字和下面的mc的位置都分别作任意的排列。提示:把文字和mc的横坐标分别放入一个数组中。 sppc

  16. 情境06 动画间隔调用setInterval函数—雨中西湖 动画演示(源文件4-6.fla) • 知识点:setInterval、clearInterval、updateAfterEvent()。 sppc

  17. 脚本语言 setInterval命令 动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象 1、使用格式 setInterval(function, interval[,arg1,arg2,......argn])参数说明 function:要调用的函数或方法;可以是匿名的函数、命名函数、对象方法或电影剪辑; interval:调用的时间间隔,毫秒为单位; arg:传递给将被调用的函数或方法的参数。 2、用法举例 1) 匿名函数间隔调用。 setInterval(function(){trace("每隔1秒钟我就会显示一次")},1000); //这里的function(){}是没有函数名的函数。成为匿名函数,后面的1000是时间间隔,单位是毫秒, 1秒=1000毫秒,1分钟=60×1000=60000毫秒。 sppc

  18. 脚本语言 • 2)带参数调间隔调用 • function show1() { • trace("每隔1秒我就会显示一次"); • } • function show2(str) { • trace(str); • } • setInterval(show1,1000); • setInterval(show2,2000,"每隔2秒我就会显示一次"); • 这里“每隔2秒我就会显示一次”是参数,传递给str。 效果文件:间隔调用3.fla • 3)带对象的间隔调用 • setInterval(show,1000); //每隔1秒调函数xiayu一次 • function show() { • time = new Date(); • hour = time.getHours(); • minu = time.getMinutes(); • sec = time.getSeconds(); • datetime = String(hour)+":"+String(minu)+":"+String(sec); • //这里的datetime是一个动态文本框的变量名字。 • } sppc

  19. 脚本语言 另外,Flash 提供了两个类型转换函数。Number函数可以将一个字符串转换成数字,相应的,String函数可以将一个数字转换成一个字符串,当表达式中有字符串和数字时,ActionScript优先考虑字符串,将数字转换为字符串后再进行字符串运算。 上例中,可以将: datetime = String(hour)+":"+String(minu)+":"+String(sec); 改为: datetime = hour+":"+minu+":"+sec; clearInterval命令 停止 setInterval() 调用。 1、使用格式 clearInterval(intervalID:Number) : Void 参数说明 intervalID:Number - 通过调用 setInterval() 而返回的数字型(整数)标识符。 2、用法举例 sppc

  20. 脚本语言 • PPT计时时钟 • clearInterval(ppt); • var ppt = setInterval(show, 1000); • time1 = new Date(); • hour1 = time1.getHours(); • minu1 = time1.getMinutes(); • sec1 = time1.getSeconds(); • function show() { • time2 = new Date(); • hour2 = time2.getHours(); • minu2 = time2.getMinutes(); 效果文件:ppt 计时.fla • sec2 = time2.getSeconds(); datetime = String(hour2)+":"+String(minu2)+":"+String(sec2); • //这里的datetime是一个动态文本框变量名字。 • if (minu2-minu1 == 3) { //3分钟 • clearInterval(ppt); • } • } sppc

  21. 脚本语言 updateAfterEvent命令 有很多人做鼠标追随效果的时候,总是发现鼠标移动不流畅,不知该如何解决。其实方法很简单,你只需要加上一句updateAfterEvent()就ok了。 1、使用格式 updateAfterEvent() 在 onClipEvent() 处理函数内调用updateAfterEvent函数时,或将其作为传递给 setInterval() 的函数或方法的一部分进行调用时,将更新显示(与为影片设置的每秒帧数无关)。如果对 updateAfterEvent 的调用不在 onClipEvent() 处理函数内,也不是传递给 setInterval() 的函数或方法的一部分,则 Flash 将忽略该调用。此函数只对某些 Mouse 和 MovieClip 处理函数起作用:Mouse 类的 mouseDown、mouseUp、mouseMove、keyDown 和 keyUp 处理函数;MovieClip 类的 onMouseMove、onMouseDown、onMouseUp、onKeyDown 和 onKeyUp 处理函数。它对 Key 类不起作用。 其实说到底updateAfterEvent的作用就是使光标移动看起来更加顺畅。 sppc

  22. 交互分析 我们过去做下雨效果时,一般是通过帧的循环来复制雨滴的,帧的循环其实也就是间隔一定的时间。那么,我们当然也完全可以用setInterval来每隔一定时间就调用函数,而这个函数的功能就是复制一滴雨滴,并且设置其坐标。 动画演示(源文件4-6.fla) sppc

  23. 添加脚本 • 方法1:非参数调用 • 在第一帧上的代码: • i=0; • drop._visible=0; • function xiayu(){ • duplicateMovieClip(drop,"r"+i,i); • _root["r"+i]._x=Math.round(Math.random()*550); • _root["r"+i]._y=Math.round(Math.random()*400); • updateAfterEvent(); • i++; • if(i==100){ • i=0; } • } • var sj; //设置变量 • sj=setInterval(xiayu,20); • //每隔20毫秒调用函数xiayu一次,设置时间要大于影片剪辑实例drop全部播放的时间,否则看不到涟漪。 sppc

  24. 添加脚本 • 方法2:参数调用 • 我们把rain做为参数传递,那么上面的程序可以改为: • i=0; • drop._visible=0; • function xiayu(md){ • duplicateMovieClip(md,"r"+i,i) • _root["r"+i]._x=Math.round(Math.random()*550); • _root["r"+i]._y=Math.round(Math.random()*400); • i++; • if(i==100){ • i=0; • } • } • varsj;//设置变量 • sj=setInterval(xiayu,20,rain); //每隔20毫秒调函数xiayu一次。 • 运行程序,检查一下,效果和上面的程序是不是一样? sppc

  25. 上机实验二十三 效果文件 4-6-1.swf 1、使几个影片剪辑mc间隔相同时间播放,素材源文件4-6-1.fla。 sppc

  26. 上机实验二十三 效果文件 4-6-2.swf 2、不管顺序播放还是随机播放,使一个mc播放结束,后一个mc开始播放,这时的时间间隔等于输入文本的时间,素材源文件4-6-2.fla。 sppc

  27. 情境07 加载外部影片—loadMovie应用—画中画 动画演示(源文件4-7.fla) • 知识点:①loadMovie()、②MovieClip._lockroot、③getDepth、getNextHighestDepth()、。 sppc

  28. 脚本语言 loadMovie命令 加载外部的SWF动画或者图片文件到FLASH影片中 。 1、使用格式 loadMovie("url",target[,method])参数说明: 参数说明 (1)url:要加载的SWF文件或图片文件所在的绝对路径或相对路径。 使用相对路径一般应将播放的.swf文件与要加载的.swf文件放在同一文件夹中。绝对路径必须有详细的路径地址。 (2)target:对影片剪辑的引用或者目标影片剪辑路径的字符串。 (3)method:指定用于发送变量的HTTP方法,这个参数必须时字符串GET或者POST。如果没有要发送的变量,就省略这个参数。GET方法用于发送少量的变量,POST方法用于发送长字符串的变量。 这是个可选参数,一般可以不选。 如果SWF文件加载到目标影片剪辑,则可使用该影片剪辑的目标路径来定位加载的SWF文件。加载到目标的SWF文件或图像会继承目标影片剪辑的位置、旋转和缩放属性。加载的图像或SWF文件的左上角与目标影片剪辑的注册点对齐。 sppc

  29. 脚本语言 2、用法举例 例1:在同一目录下要加载一个名为“my_MC.swf”的影片到主场景中。可先制作一个按钮,并给该按钮添加如下动作代码: on (press) { loadMovie("my_MC.swf", _root); } 例2:在同一目录要加载SWF文件aa.swf,并替换舞台上已存在的名为my_MC的影片剪辑。可先制作一个按钮,并给该按钮添加如下动作代码: on (press) { loadMovie("aa.swf","my_MC"); } 例3:在同一目录要加载图片文件a.jpg,并替换舞台上已存在的名为my_MC的影片剪辑。可先制作一个按钮,并给该按钮添加如下动作代码: on (press) { loadMovie("a.jpg","my_mc"); } sppc

  30. 脚本语言 • 例4:图片展示 • var tu=["photo01.jpg", "photo02.jpg", "photo03.jpg", "photo04.jpg"]; • var i = 0; • function show() { • _root.createEmptyMovieClip("pic",0); • _root.pic.loadMovie(tu[i]); • _root.pic._alpha = 0; • _root.pic._xscale = 10; • _root.pic._yscale = 10; • i++; • i %= 4; • _root.onEnterFrame = function() { • _root.pic._alpha += 7; • _root.pic._xscale += 5; • _root.pic._yscale += 5; • if (_root.pic._alpha>=100) { • delete _root.onEnterFrame; 效果文件:图片展示.fla • } • }; • } • onMouseDown = function () { • show(); }; sppc

  31. 脚本语言 unloadMovie命令 删除用loadMovie命令加载的SWF文件或图片。 1、使用格式 unloadMovie(target) 参数说明: target:要删除的影片剪辑对象或表示要删除的影片剪辑路径的字符串。 2、用法举例 若要删除的影片剪辑“my_MC”,可先制作一个按钮,并给该按钮添加如下动作代码: on (press) { unloadMovie("my_MC"); } SPPC

  32. 脚本语言 MovieClip._lockroot命令 因为用loadMovie()加载的外部文件是加载到一个mc元件上,所以,外部文件中指向场景(_root)的路径此时应该是指向这个mc元件而不是主文件的场景。使用MovieClip._lockroot可以使加载的文件中的_root仍然是指向原来文件的场景。 MovieClip._lockroot它是一个布尔值。 this._lockroot = true; getNextHighestDepth命令 getNextHighestDepth方法可以返回影片剪辑下一个可用的最大深度值。 更好的的理解就是当前最大的深度值加1。因此用这个深度值,MC将在最上面。 mc. getNextHighestDepth(); getDepth命令 返回某个MC的深度,比如要返回my_MC的深度: var mydepth = my_MC.getDepth(); sppc

  33. 脚本语言 • 用法举例 • for (i=1; i<6; i++) { • this.attachMovie("pic"+i,"pic"+i+"_mc", • this.getNextHighestDepth()); • var pic_mc = eval("pic"+i+"_mc"); • pic_mc._x = 150+random(200); • pic_mc._y = 100+random(200); • }; • pic1_mc.onRelease = function() { • var zddepth = _root.getNextHighestDepth()-1; • var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); 效果文件 深度交换.fla • this.swapDepths(zd_mc); • }; • pic2_mc.onRelease = function() { • var zddepth = _root.getNextHighestDepth()-1; • var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); • this.swapDepths(zd_mc); • }; sppc

  34. 脚本语言 • pic3_mc.onRelease = function() { • var zddepth = _root.getNextHighestDepth()-1; • var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); • this.swapDepths(zd_mc); • }; • pic4_mc.onRelease = function() { • var zddepth = _root.getNextHighestDepth()-1; • var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); • this.swapDepths(zd_mc); • }; • pic5_mc.onRelease = function() { • var zddepth = _root.getNextHighestDepth()-1; • var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); • this.swapDepths(zd_mc); • }; sppc

  35. 脚本语言 _global对象 变量是什么? 可以说就是存放信息的容器(更确切的说是指向内存空间中某个存贮位置的指针)。 全局变量,顾名思义就是在整个 Movie 中都可以访问的变量,全局变量和函数对于文档中的每一时间轴和范围而言都是可见的。它的声明比较特殊,若要创建具有全局范围的变量,请在变量名称前使用_global 标识符,并且不使用 var 语法。 例如: 在根时间轴第一帧上定义两个变量,然后将 trace()放在不同地点去返回它们的值,以观察它们的区别 Var a=5; _global.b=3; sppc

  36. 交互分析 制作思路:只要在同一场景中使用多个mc,使它们同时载入外部.swf文件或者jpg,那么就可以实现多画面效果。但是,在多画面与画中画的状态下,因为各mc载入外部.swf文件时有一个时间差,所以各画面仿电视的同步播放比较困难。这需要被调入的外部.swf文件和主场景文件的配合。 动画演示(源文件4-7.fla) sppc

  37. 添加脚本 打开外部文件“flower.fla”文件,AS脚本为: 1、在帧上的脚本 第1帧: gotoAndPlay(x); //这个x是主场景中设置的全局变量; 最后1帧: x=1; //设置本地变量x 打开主文件4-7.fla,在这个源文件上的脚本如下: 第1帧: stop(); swf1="flower.swf"; //设置变量swf1来表示外部.swf文件 loadMovie(swf1,e); //在目标元件e上调入swf1 e._x=125; //设置目标元件e的坐标(即调入swf1的坐标) e._y=50; sppc

  38. 添加脚本 第2帧: clip=[a,b,c,d]; //设置数组对象,数组元素为4个目标mc lp=["瓢虫.swf","专业调音台.swf","闪客起航.swf","牧马制作.swf"]; //设置数组对象,数组元素为swf,如网上调用,格式为:"http://bbs.flasher123.com/UploadFile/瓢虫.swf" _global.x=_root.e._currentframe; //把目标mc播放的当前帧(即调入外部文件的当前帧)用全局变量x表示; //下面脚本中使调入外部文件的从全局变量x帧开始播放; m=getNextHighestDepth(); //取得下一个可用的mc的深度; a.swapDepths(m); //设置mc元件a的深度为下一个可用的mc的深度; loadMovie(swf1,a); //在目标元件a上调入swf1 a._x=125; //设置目标元件a的坐标(即调入swf1的坐标) a._y=50; a._xscale=50;//设置目标元件a的放大系数(即调入swf1的放大系数) a._yscale=50; j=k=0; //设置变量初值 sppc

  39. 添加脚本 第3帧 _global.x=_root.e._currentframe; //与第2帧上的脚本类同 m=getNextHighestDepth() b.swapDepths(m) loadMovie(swf1,b); b._x=125; b._y=250; b._xscale=50; b._yscale=50; 第4帧 _global.x=_root.e._currentframe; //与第2帧上的脚本类同 m=getNextHighestDepth() c.swapDepths(m) loadMovie(swf1,c); c._x=400; c._y=250; c._xscale=50; c._yscale=50; sppc

  40. 添加脚本 第5帧 _global.x=_root.e._currentframe; //与第2帧上的脚本类同 m=getNextHighestDepth(); d.swapDepths(m); loadMovie(swf1,d); d._x=400; d._y=50; d._xscale=50; d._yscale=50; unloadMovie(e);//删除最开始调入的swf 第6帧 e._lockroot=true;//使被选中的元件在调入的外部文件的_root指向本身的主时间轴 loadMovie(lp[k],e); //配合按扭中的mc的变化; sppc

  41. 添加脚本 • 2、在按扭上的脚本 • 在“多屏幕”按扭上的脚本: • on(release){ • nextFrame(); • } • 在“单屏”按扭上的脚本: • on(release){ • for(i=0;i<4;i++){ • unloadMovie(clip[i]);//删去元件a,b,c,d上加载的外部swf文件; • clip[i].swapDepths(-i-1); //降低a,b,c,d的深度,使元件e加载的swf能显示出来; • clip[i]._alpha=100; //元件a,b,c,d的透明度有可能降低,这里把恢复它们的透明度 • } • nextFrame(); //到下一帧停下 • } sppc

  42. 添加脚本 • 在“屏幕选择”按扭上的脚本 • on(press){ • txt="";//设置文本txt为空 • switch(j=j+1){//创建switch动作脚本语句的分支结构 • case1: //如果j==1,就执行 • a._alpha=40; //元件a是透明度为40 • break; //跳出switch循环体。以下类同 • case2: • a._alpha=100; • b._alpha=40; • break; • case3: • b._alpha=100; • c._alpha=40; • break; sppc

  43. 添加脚本 • if(j==0){ • txt="请先选择屏幕"; • } • else{//当j不等于0时,执行下列命令: • clip[j-1]._alpha=100; • //恢复被选中的元件的透明度 • clip[j-1]._lockroot=true; • //使被选中的元件在调入的外部文件的_root指向本身的主时间轴 • loadMovie(lp[k],clip[j-1]); • //在clip[j-1]元件中调入数组lp中第k个元数表示的网址 • k++; • if(k==lp.length){ //数组lp中元素个数 • k=0; • } • } • } • case4: • c._alpha=100; • d._alpha=40; • break; • case5: • d._alpha=100; • j=0; • break; • } • } • 在“更换节目”按扭上的脚本 • on(release){ sppc

  44. 添加脚本 • 在第6帧上“多屏”按扭上的脚本 • on(release){ • gotoAndStop(1); • } • 在第6帧上“更换节目”按扭上的脚本 • on(release){ • k++; • if(k==4){//数组lp中有4个元素 • k=0; • } • e._lockroot=true; • loadMovie(lp[k],e);//在e元件中调入数组lp中第k个元数表示的网址 • } sppc

  45. 上机实验二十四 素材源文件 4-7.fla 效果文件 4-7-1.fla 把2至4帧的脚本用自定义函数简化;把在“屏幕选择”按扭上的脚本用函数或者数组变量简化。 sppc

  46. 情境08 加载外部文件—文本和mp3文件—音频播放 动画演示(源文件:4-8.fla) • 知识点: ①onSoundComplete 、 ②loadSound、③XML 。 sppc

  47. 脚本语言 • onSoundComplete 命令 • onSoundComplete是事件触发函数,当声音播放完成时触发。 • 1、使用格式 • my_sound.onSoundComplete = function(){ // 此处是您的语句 } • 2、用法举例 • 用法 1:下面的示例使用匿名函数: • my_sound = new Sound(); • my_sound.attachSound("mySoundID"); • my_sound.onSoundComplete = function() { • trace("mySoundID completed"); } • my_sound.start(); • 用法 2:下面的示例使用命名函数: • function callback1() { • trace("mySoundID completed"); } • my_sound = new Sound(); • my_sound.attachSound("mySoundID"); • my_sound.onSoundComplete = callback1; • my_sound.start(); sppc

  48. 脚本语言 • loadSound命令 • 是从电影剪辑之外加载声音文件的方法 • 1、使用格式 • loadSound(URL, isStreamSound); • 参数说明: • 1)URL指定外部声音所在的URL • 2)isStreamSound为TRUE或FALSE,为TRUE时,表示加载的声音是声音流(既一边加载一边开始播放),为FALSE时,表示是事件声音(既要完全加载到内存后才能开始播放)。 • 2、用法举例 • 用法 1)載入事件聲音 (必須在完全載入後,才能夠播放): • var my_sound:Sound = new Sound(); • my_sound.loadSound("song1.mp3", false); • 用法 2)載入串流聲音聲音 (既一边加载一边开始播放): • var my_sound:Sound = new Sound(); • my_sound.loadSound("song1.mp3", true); sppc

  49. 脚本语言 • XML命令 • 1、使用格式 • 1)建立XML对象: • var myXML = new XML(); • 2)引用XML文件: • myXML.load("data.xml"); • 3)忽略空格: //默认的为false • myXML.ignoreWhite = true; • 4)处理XML对象的load(XML.load 方法) • public load(url:String) : Boolean • 从指定的 URL 中加载 XML 文档,并使用下载的 XML 数据替换指定 XML 对象的内容。该 URL 是相对 URL,并使用 HTTP 进行调用。加载过程是异步的;它不会在执行 load() 方法后立即结束。 • 执行 load() 方法时,XML 对象的 loaded 属性被设置为 false。在 XML 数据下载完毕后,loaded 属性被设置为 true,并调用 onLoad 事件处理函数。直到 XML 数据完全下载后,才开始分析。如果该 XML 对象以前包含任何 XML 树,它们将被放弃。 • 您可以定义在调用 XML 对象的 onLoad 事件处理函数时执行的自定义函数。 sppc

  50. 脚本语言 • 5)处理XML对象的onLoad(XML.onLoad 处理函数)data.onLoad = function(success:Boolean) {statements;}  收到来自服务器的 XML 文档时由 Flash Player 调用。如果成功接收了 XML 文档,则 success 参数为 true。如果未收到该文档,或从服务器接收响应时出现错误,则 success 参数为 false。默认情况下,此方法的实现不处于活动状态。若要覆盖默认实现,必须指定一个包含自定义动作的函数。 • 2、用法举例 • 1)创建用于profile.xml文件 • <?xml version="1.0" encoding="Unicode"?> • <personal> • <profile> • <name>王晓明</name> • <sex>男</sex> • <age>21</age> • <city>南宁</city> • </profile> • <profile> • <name>李繁</name> • <sex>女</sex> • <age>21</age> • <city>上海</city> • </profile> • <profile> • <name>赵翼</name> • <sex>男</sex> • <age>21</age> • <city>北京</city> • </profile> • </personal> sppc

More Related