Flash游戏制作常用代码解析_第1页
Flash游戏制作常用代码解析_第2页
Flash游戏制作常用代码解析_第3页
Flash游戏制作常用代码解析_第4页
Flash游戏制作常用代码解析_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

—PAGE69—往链点点通共享资源,了解更多请登录HYPERLINK"www。WL566。com"www.WL566.com目录TOC\o"1-1”\h\z\uHYPERLINK\l"_Toc115512999"Flash游戏制作常用代码解析ﻩPAGEREF_Toc115512999\h3HYPERLINK\l"_Toc115513000"FLASH游戏制作基础:响应键盘的四种方法ﻩPAGEREF_Toc115513000\h9HYPERLINK\l”_Toc115513001"Flash游戏制作-—空战ﻩPAGEREF_Toc115513001\h12HYPERLINK\l"_Toc115513002"Flash飞行游戏制作全解ﻩPAGEREF_Toc115513002\h19HYPERLINK\l"_Toc115513003"Flash游戏制作—-迷宮 PAGEREF_Toc115513003\h29_Toc115513005”用Flash制作互动的小人 PAGEREF_Toc115513005\h45HYPERLINK\l"_Toc115513006"常见的飞机放射子弹的掌握 PAGEREF_Toc115513006\h49HYPERLINK\l"_Toc115513007"一个完全使用AS2编制的飞机游戏之制作详解ﻩPAGEREF_Toc115513007\h50ﻬFlash游戏制作常用代码解析1.猎取随机数随机函数在flash游戏制作中很常用,例如在拼图游戏中,每次开头新的游戏时可以利用随机函数使图块获得新的位置,试想一个千篇一律的游戏谁会有爱好玩下去。现在我们有两种产生随机数的方式:random()和Math.random(),举例来讲,如果我们相随机赋给x一个0-5的数,我们可以使用x=random(6)或者x=Math。random()*5。但这两种方式产生的随机数是有区分的,用random(6)方法返回的x是0〈=x〈=5的整数,而另外一种返回的x则是0〈=x<5的小数。试着在第一帧中写入下面的AS,并在其次帧创建内容帧以形成循环:x=random(6);ﻫy=Math.random()*5;ﻫtrace("x=”+x+",y="+y);在output窗口中将得到以下数据:。.。ﻫx=1,y=3.66887632058933

x=2,y=4.39878350123763ﻫx=0,y=0.522367884404957ﻫx=3,y=2.95675310306251

x=5,y=4.03038211166859ﻫx=2,y=0。223042098805308

..。区分一目了然.2.获得鼠标及MC(MovieClip)的位置另外一个在flash游戏制作使用频率比较高的参数就是坐标了,鼠标的坐标和MC的坐标的获得方式是不同的,鼠标的坐标可以用_xmouse和_ymouse获得,MC的坐标可以用MovieClip。_x和MovieClip._y获得。值得注意的是在获得坐标时要考虑实际需要的坐标值是相对的还是肯定的,下面给出了一个典型的获得鼠标相对坐标和肯定坐标的例子(例1):其中浅色的正方形是一个被命名为mc的MovieClip,四个文本框属性均被设置为DynamicText(请参阅《HYPERLINK"http://www.yesky.com/20020703/1618733.shtml"\t"_blank”FlashMX文本工具详解》),场景中的两个用于获得变量x_timeline和y_timeline(肯定坐标),正方形中的两个用于获得变量x_movieclip和y_movieclip(相对坐标),为了获得变量,需要在文本框的属性面板中的Var属性中分别填入相应的变量名,与上面例子形成循环的方式一样,在第一帧中写下面的AS,其次帧创建为内容帧:x_timeline=_root._xmouse;

y_timeline=_root._ymouse;ﻫx_movieclip=mc。_xmouse;

y_movieclip=mc._ymouse;注意:场景的坐标原点为其左上角,坐标值向右向下递增,为正值(这与我们通常意义的坐标并不相同);MC的坐标原点是编辑MC时的中心,坐标象限见图1.获得MC坐标的方法与上面说的大同小异,我们将在下面的MC属性简介中做介绍。3.MC常用属性简介属性用法说明可获得可设置取值范围_xﻫ_yMC._xﻫMC._y返回/设置MC的横纵坐标值YY数值_xscale

_yscaleMC._xscaleﻫMC。_yscale返回设置MC的x/y轴缩放比例YY数值_alphaMC._alpha返回/设置MC的透明度YY0—100_visibleMC。_visible返回/设置MC的可见性YYtrue;false_widthﻫ_heightMC._widthﻫMC._height返回/设置MC的宽/高值YY数值_rotationMC._rotation返回/设置MC的角度YY数值

_currentframeMC._currentframe

返回MC的当前帧YN-_totalframesMC._totalframes返回MC的总帧数YN—_framesloadedMC._framesloaded返回已下载帧数YN-_nameMC。_name返回/设置MC的名称YY4。推断按键既然是游戏,当然就要响应玩家的各种反应,除了鼠标,最直接的就是键盘了。响应键盘无非是推断玩家按下了哪一个键或者组合键,要实现这些其实很简洁,我们既可以通过按钮或MC的大事来响应按键,也可以通过帧上的动作来响应,举例说明:(1)按钮的keyPress方法:先说按钮,按钮除了响应鼠标的一些动作(如:rollOver,release..。)之外还有几个是响应固定按键的(如Enter,Left,Home,PageDown。..),下面我们就来制作一个。建立一个按钮,拖到场景中,捆绑下面的AS:on(keyPress”"){

trace("按下了Left键”);ﻫ}这样当我们在测试的环境下按下左方向键后,output窗口就会显示出"按下了Left键"。下面说说怎样使MC响应按键更简洁的按键。(2)MC响应单个按键:onClipEvent(keyDown){ﻫif(Key.isDown(72)){ﻫtrace(”按下了H键");ﻫ}ﻫ}这样在测试的环境下按下H键,output窗口就会显示出"按下了H键”,其中72是H键的keyCode值(其他按键的keyCode值将在附录中给出),如果不知道某个键的keyCode值也没关系,Flash为我们供应了getCode函数,将上面AS中的72替换成Key。getCode("H”)会得到同样的效果。(3)MC响应组合键:onClipEvent(keyDown){

if(Key。isDown(72)&&Key.isDown(17)){ﻫtrace(”您按下的组合键是Ctrl+H");ﻫ}

}在测试的环境中按下Ctrl+H键,output窗口就会显示出”您按下的组合键是Ctrl+H"(4)利用帧上的动作响应按键:新建一个flash文件,利用上面讲过的:在第一帧写AS,其次帧创建内容帧的方法,使影片形成循环以便随时进行推断,然后在第一帧中写入下面的几组代码,分别进行试验;如果你使用的是MX,也可以不建立其次帧,而是用试验代码代替_root.onEnterFrame=function(){...}中的"..."来达到同样的效果://①ﻫtrace(Key.getCode());//②

if(Key.isDown(72)){ﻫtrace("按下了H键");ﻫ}//③ﻫif(Key.isDown(72)&&Key.isDown(17)){ﻫtrace("按下了Ctrl+H组合键");ﻫ}//④

if(Key.isDown(17)){ﻫif(Key.isDown(72)){ﻫtemp=”+H";ﻫ}ﻫif(Key.isDown(71)){

temp="+G”;ﻫ}

trace(”按下了Ctrl”+temp+"键");

}注:对于MC的(2)(3)两种情况,可以将keyDown大事改为enterFrame大事,其中(2)还可以替换为keyUp大事.附:键码值表字母和数字键的键码值(keyCode)按键键码按键键码按键键码按键键码A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69N78W87553F70O79X88654G71P80Y89755H72Q81Z90856I73R82048957

数字键盘上的键的键码值(keyCode)功能键键码值(keyCode)按键键码按键键码按键键码按键键码0968104F1112F71181979105F2113F8119298*106F3114F9120399+107F4115F101214100Enter108F5116F111225101-109F6117F121236102。110

7103/111

掌握键键码值(keyCode)按键键码按键键码按键键码按键键码BackSpace8Esc27RightArrow39-_189Tab9Spacebar32DownArrow40。>190Clear12PageUp33Insert45/?191Enter13PageDown34Delete46`~192Shift16End35NumLock144[{219Control17Home36;:186\|220Alt18LeftArrow37=+187]}221CapeLock20UpArrow38,〈188'”2225.检测碰撞(hitTest)目前我们见到的射击游戏或打老鼠之类的游戏很多都利用了hitTest,hitTest既可以检测MC与MC的碰撞,也可以检测鼠标与MC的碰撞:hitTest的语法如下:(1)myMovieClip。hitTest(x,y,shapeFlag)这用来检测鼠标的碰撞,x和y分别代表鼠标的横纵坐标,shapeFlag用来规定检测以MovieClip的最大边界为限或以MovieClip的实际边界为限.(2)myMovieClip。hitTest(target)检测MC之间的碰撞,应用起来十分简洁。6。MC的复制与卸载MC的复制,顾名思义就是产生出一个与目标相同的MC(除了name和depth以外),语法为:duplicateMovieClip(target,newname,depth)target:被复制目标的名称;ﻫnewname:复制出的MC的名称;ﻫdepth:复制出的MC的深度。需要注意,复制出来的新MC的name最好不要相同,也不要与被复制的MC的相同,由于这样会给掌握带来不行预期的麻烦;另外depth也是一个相当重要的参数,如果新复制出的MC与前面某个复制的MC的depth属性相同(即位于通一深度),那么先前被复制的MC将被新复制的MC替换掉(不管他们是否属于同一被复制目标),这个特性常常被我用来制作鼠标跟随的效果,即炫又简洁,你试试:)再来说说MC的卸载,大家对这个MC的复制的"双胞胎兄弟”的重视程度似乎远不如他的”兄长",由于我常常在论坛中看到类似于"为什么复制出的MC在跳到其他帧,甚至到其他场景后仍然存在?"的问题,其实解决方法很简洁,就是MC的卸载:removeMovieClip(target);只要将要被卸载的MC的name替换掉语句中的target就可以成功的完成卸载任务.7.猎取影片运行时间getTimer();这个函数用以返回自影片开头播放时起已经过的毫秒数,虽然是个很简洁的函数,但用利用率却很高,尤其是在一些需要计时的游戏中。需要说明的是:毫秒与秒的计算公式为1毫秒=1/1000秒;函数以影片第一次播放的开头时刻为0,不受任何其他因素影响,也就是说如果你想从头开头计时,那么只有重起player,或者定义一个变量来存放getTimer的值,然后用getTimer与变量做减法运算以便得到新的运行时间,看下面的例子(例5).8.颜色的设置说到颜色必须先说说什么是对象,对象就是预先定义好的用来访问某些特定类型的信息的集合,大多数预定义对象都有自己的方法(被指派给一个对象的函数被称为这个对象的一个方法),你可以通过这些方法得到不同类型的返回值或执行某个动作.预定义对象包括一般对象和顶级对象,一般对象在使用前需要创建(我们将要提到的Color对象就属于这一类),而顶级对象则可以直接调用(入下面要说的Math对象)ﻫ下面我们简略介绍一下Color对象,它包含四种方法:getRGB():返回由最后一次setRGB调用设置的数值;ﻫgetTransform():返回由最后一次setTransform调用设置的转换值;ﻫsetRGB(0xRRGGBB):指定Color对象实例的RGB颜色,调用此方法会掩盖由setTransform方法设置的任何以前的设置;ﻫsetTransform(colorTransformObject):设置Color对象实例的颜色转换信息colorTransformObject参数是通过newObject构造函数创建的通用对象它具有指定颜色的红、绿、蓝和alpha(透明度)成分百分比和偏移量数值的参数,颜色转换对象的参数与"高级效果”对话框中的设置相对应,定义如下:ra是红色成分的百分比(-100到100)ﻫrb是红色成分的偏移量(-255到255)ﻫga是绿色成分的百分比(—100到100)

gb是绿色成分的偏移量(—255到255)ﻫba是蓝色成分的百分比(-100到100)

bb是蓝色成分的偏移量(—255到255)ﻫaa是alpha的百分比(-100到100)ﻫab是alpha的偏移量(—255到255)myColorTransform=newObject();ﻫmyColorTransform。ra=50;ﻫmyColorTransform。rb=244;ﻫmyColorTransform.ga=40;ﻫmyColorTransform.gb=112;ﻫmyColorTransform。ba=12;

myColorTransform。bb=90;ﻫmyColorTransform.aa=40;ﻫmyColorTransform。ab=70;也可使用以下语法来创建colorTransformObject参数:myColorTransform={ra:'50',rb:'244’,ga:'40',gb:’112',ba:'12’,bb:'90',aa:'40',ab:'70’}下面的例子展现了为一个目标电影创建一个新的Color对象,使用Object构造器创建一个颜色转变对象以及使用setTransform方法将这个颜色转变对象传递给一个Color对象的过程://为目标MC创建一个名为myColord的对象

myColor=newColor(MC);

//使用一般对象Object对象创建一个名为myColorTransform的颜色转变对象

myColorTransform=newObject;ﻫ//为myColorTransform设置值ﻫmyColorTransform={ra:’50',rb:'244',ga:'40',gb:'112’,ba:'12',bb:'90',aa:’40’,ab:'70'};ﻫ//将颜色转变对象和为MC创建的颜色对象关联起来

myColor.setTransform(myColorTransform);.9.三角函数的运用三角函数属于Flash中的顶级对象----Math,一提到这个名词很多人是不是会感到”恐惧”,但在游戏的制作中它可是必不行少的。这里我们利用Math的atan方法来制作一个永久指向鼠标的指针(例6),其他的三角函数以及数学函数的用法和注意事项请参考附录中的数学函数表。新建一个MC,画一个长度为70的水平指向右侧的箭头(箭头根部放在中心点上),回到场景,Ctrl+J修改影片的大小为200*200,将指针从库中拖入场景,命名为”pointer",修改坐标为100*100,在主timeline的第一帧中写如下AS:x=_xmouse-100;ﻫy=_ymouse-100;

//将坐标中心移到场景的中心

tan=Math.atan(y/x)*180/Math。PI;ﻫ//注意要使用弧度表示的角度值ﻫif(x〉=0&&y〉=0){ﻫr=Math。round(tan);ﻫ}elseif(x>=0&&y<0){ﻫr=Math.round(360+tan);ﻫ}else{ﻫr=Math.round(180+tan);ﻫ}ﻫ//推断各种不同的情况,通过运算使r值在0-360之间ﻫpointer._rotation=r;ﻫ//将r值付给_rotation放置一个用来显示r值的文本框属性为DynamicText,猎取变量(Var)为"r",其次帧建立内容帧,Ctrl+Enter测试.附:

数学函数表(Math)方法描述语法说明abs计算并返回由参数x指定的数字的肯定值.Math.abs(x)

acos以弧度为单位计算并返回参数x中指定的数字的反余弦值.Math.acos(x)—1。0<=x<=1.0asin以弧度为单位计算并返回参数x中指定的数字的反正弦值.Math。asin(x)—1.0〈=x<=1.0atan计算并返回参数x中指定的数字的反正切值.Math.atan(x)返回值介于负二分之pi与正二分之pi之间.atan2以弧度为单位计算并返回y/x的反正切值.返回值表示相对直角三角形对角的角,其中x是临边边长,而y是对边边长。Math。atan2(y,x)x/y分别指定点的x坐标和y坐标ceil返回指定数字或表达式的上限值.数字的上限值是大于等于该数字的最接近的整数。Math。ceil(x)

cos返回由参数x指定的角的余弦值(介于—1.0与1。0之间的值).必须以弧度为单位指定角度x.Math.cos(x)x为弧度,换算公式为:1弧度=角度*180/Math.PIexp返回e的x次方的值,其中e为自然对数的底(e),x为参数x中指定的指数。Math.exp(x)常数Math.E可以供应e的值.floor返回参数x中指定的数字或表达式的下限值。下限值是小于等于指定数字或表达式的最接近的整数.Math。floor(x)表达式:Math.floor(12。5)将返回值:12log返回参数x的自然对数.Math。log(x)x〉0max返回两个数中最大者Math.max(x,y)

min返回两个数中最小者Math.min(x,y)

pow计算x的y次幂Math。pow(x)

random返回n,其中0<=n<1Math.random()获得a—b之间的随机整数的公式为:ﻫMath。floor(Math.random()*(b-a+1)+a)round将参数x的值向上或向下舍入为最接近的整数并返回值Math。round(x)

sin计算并返回以弧度为单位指定的角度的正弦值Math.sin(x)换算公式参见cossqrt计算并返回指定数字的平方根Math.sqrt(x)x〉=0tan计算并返回指定角度的正切值Math.tan(x)换算公式参见cos以上我们向大家介绍了Flash游戏制作中最常用的一些ActionScript,掌握了这些基本掌握方法,就可以制作出很多有意思的Flash游戏,同时在制作的过程中你还会发现更多的技巧,欢迎HYPERLINK"mailto:yangling@chinabyte.com"投稿和大家一起沟通。FLASH游戏制作基础:响应键盘的四种方法响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛的使用,尤其是在FLASH游戏制作中,如果缺少了响应键盘的方法,那是不行能的,而响应键盘的方法主要的四种,分别是:ﻫ1、利用按钮进行检测

2、利用KEY对象ﻫ3、利用键盘侦听的方法ﻫ4、利用影片剪辑的keyUp和keyDown大事来实现响应键盘ﻫ只有娴熟掌握了这些方法,然后加以变通的话,就会得到很多意想不到的效果,下面我就结合理论和自己的想法简要的介绍一下。ﻫ第一种响应键盘的方法:利用按钮进行检测来实现响应键盘ﻫ在按钮的on大事处理函数中不但可以对鼠标大事作出响应,而且可以对键盘大事作出响应。如在按钮的动作面板中加入如下所示的代码,在敲击键盘上的X键时输出窗口中将提示:Xispressedﻫ在按钮上加上:on(keyPress”x”){trace("Xispressed");

}但是要注意的是:检测键盘上的字母键时,字母都应为小写。如果要检测键盘中的特殊键,Flash中有一些专门的代码来表示它们,下面列出了一些常用的功能键的表示代码:如要检测键盘上的键,可以使用下面的ActionScript:on(keyPress""){

trace("Leftispressed");

}另外,你可以在一个按钮中加入若干个on函数,也可以在一个on函数中结合多种大事,这使您可以为按钮定义自己熟识常用的快捷键,如下所示:on(release,keyPress””){ﻫ_root。myMC。prevFrame();ﻫ}on(release,keyPress""){_root。myMC.nextFrame();}上面的第一个语句实现单击按钮或按键盘上的左方向键,掌握影片剪辑myMC回退1帧,而上面的其次个语句实现单击按钮或按键盘上的右方向键,掌握影片剪辑myMC前进1帧。其次种响应键盘的方法:利用Key对象来实现响应键盘的操作利用按钮检测按键动作很有效,但是并不利于检测持续按下的键,所以不适合于制作某些通过键盘掌握的游戏.这时,您就需要用到Key对象.Key对象包含在动作面板的“对象”/“影片"名目下面,它由Flash内置的一系列方法、常量和函数构成。使用Key对象可以检测某个键是否被按下,如要检测左方向键是否被按下,可以使用如下ActionScript:if(Key.isDown(Key.LEFT)){trace(”Theleftarrowisdown");}函数Key。isDown返回一个布尔值,当该数中的参数对应的键被按下时返回true,否则返回false。常量Key。LEFT代表键盘上的左方向键.当左方向键被按下时,该函数返回true。Key对象中的常量代表了键盘上相应的键,下面列出了一些基本的常量:一些功能键的表示:Key.BACKSPACEKey。ENTERKey.PGDNﻫKey。CAPSLOCKKey.ESCAPEKey.RIGHTﻫKey。CONTROLKey。HOMEKey。SHIFTﻫKey。DELETEKEYKey。INSERTKey.SPACEﻫKey。DOWNKey.LEFTKey。TABﻫKey.ENDKey。PGUPKey.UP以上是键盘上的功能键,那么如何表示键盘上的字母键呢?ﻫKey对象供应了一个函数Key。getCode来实现这一功能,如下所示:if(Key.isDown(Key。getCode("x”))){trace(”Xispressed”);}上面脚本的意思就是,利用Key.getCode函数来告知系统你是否按下了x键,如果按下了x键以后,函数Key.isDown则会返回true,在输出窗口就会输出Xispressed。第三种响应键盘的方法:利用键盘侦听的方法来实现响应键盘(个人习惯用这种方法)假设在影片剪辑的onClipEvent(enterFrame)大事处理函数中检测按键动作,而影片剪辑所在的时间轴较长,或计算机运算速度较慢,就有可能消灭这种情况:即当在键盘上按下某个键时还将来得及处理onClipEvent(enterFrame)函数,那么按键动作将被忽视,这样的话,很多你想要的效果就会无法实现了.

另外,还有一个需要解决的问题就是,在某些游戏(如射击)中,我们需要按一次键就执行一次动作(放射一发子弹),即使长时间按住某个键不放也只能算作一次按键,而Key对象并不能区分是长时间按住同一个键还是快速地多次按键.所以如果要解决这个问题,就需要用到键盘侦听的方法.你可以使用“侦听器(listener)"来侦听键盘上的按键动作。要使用侦听器之前,首先需要创建它,你可以使用如下所示的命令来告知计算机你需要侦听某个大事:Key.addListener(_root);Key.addListener命令将主时间轴或某个影片剪辑作为它的参数,当侦听的大事发生时,可以用这个参数指定的对象来响应该大事。上面的代码指定主时间轴来响应该大事。要让主时间轴对该大事作出响应,还需要设置一个相应的大事处理函数,否则设置侦听器就没有什么意义了。键盘侦听的大事处理函数有两个:onKeyUp和onKeyDown,如下所示:Key.addListener(_root);_root。onKeyUp=function(){trace(Key.getAscii());};//代码的意思是,当按下一个键并释放后,输出窗口将输出你按下的那个键的Ascii码当然,你也可以使用影片剪辑作为侦听键盘的对象,只需要使用影片剪辑的路径代替_root作为Key.addListener命令的参数就可以了.比如下面代码:Key。addListener(_root。mc);_root。mc.onKeyUp=function(){trace(Key。getAscii());};代码的意思是,当按下一个键并释放后,输出窗口将输出你按下的那个键的Ascii码,意思差不多,但是键盘侦听对象不同,一个是影片mc,一个是主时间轴。第四种响应键盘的方法:利用影片剪辑的keyUp和keyDown大事来实现响应键盘最后一种方法很容易被忽视,但是也有肯定的应用价值,最重要的是把概念弄清楚.影片剪辑包含两个与键盘相关的大事keyUp和keyDown,使用它们也可以实现对按键大事的响应例如下面的代码:onClipEvent(keyDown){trace(Key。getAscii());}//当按下键盘上的一个键的时候,输出窗口将输出按下的这个键的Ascii码值.函数Key。getAscii表示返回与按键相对应的ASCII码,其中ASCII码是一个整数,键盘上的每个字符对应一个ASCII码,如字母A对应的ASCII码为65,B对应的ASCII码为66,a对应的ASCII码为97,b对应的ASCII码为98,+对应的ASCII码为43等。需要注意的是:只有字符键才有ASCII码,键盘上的功能键是没有ASCII码的.ﻫ如果我想在输出窗口中输出与按键相对应的字符,那怎么办?ﻫ这时候,你可以使用String对象的fromCharCode函数将ASCII码转换成字符,如将上例的代码改成如下所示:onClipEvent(keyDown){trace(String。fromCharCode(Key.getAscii()));};//意思就是说,当按下键盘的一个键,输出按下的这个键相对应的字符,当然除了功能键。ﻫ关于String对象的简略解释,大家可以查看动作面板的“对象”/“核心"名目下面。Flash游戏制作--空战Flash游戏制作-—空战ﻫ

射击类游戏始终是Flash游戏制作中的一个热点,大多数Flash射击游戏都是都是纵版的,也就是游戏背景的前进方向是垂直的,这样的游戏已经司空见惯了.所以这次我们来制作一个横版的射击游戏,游戏背景和飞机的运动方向都是水平的.游戏运行后的主界面如图1所示:图1游戏说明:此游戏玩家是以第一视角的模式来进行的,所谓第一视角就是游戏的界面相当于玩家的双眼,通过这样的形式,可以使游戏达到一种格外逼真的效果,仿佛您已经置身于激烈的游戏之中了.游戏中玩家可以使用鼠标掌握屏幕中的瞄准镜,瞄准并射击从左边随机消灭的敌机,飞机会以各种路线在空中飞行以避开你的射击,如果敌机被射中后,就会从空中跌落下来,相应的玩家会得一分,在游戏规定的100秒内,尽量击落更多的敌机。制作步骤:一:游戏中相应元件的制作1.既然是空战游戏,自然少不了飞机,所以首先来制作游戏中的敌机。在影片中新建一个Graphic元件,,命名为gPlane,进入元件的编辑状态后,可以从外部导入一张飞机的图片,然后将其分离,稍稍加工一下即可。或者使用Flash供应的强大的绘图工具自己绘制一架飞机,如图2所示:图2有了飞机,还需要一个飞行员飞机才可以工作,所以再建一个Graphic元件,命名为gMan,进入元件编辑状态后,使用椭圆绘图工具绘制一个简洁的人头即可,如图3所示:图3接下来就需要将飞机和飞行员组合到一起了,由于游戏中需要使用Action动作脚本对飞机进行掌握,所以需要将最终的组合体制作成Movieclip元件,所以再新建一个Movieclip元件,进入元件的编辑状态后,将元件gMan和Gplane分别拖到编辑区,使用鼠标调整其相对位置,如图4所示:图4这样,一架逼真的战斗机就制作完成了。ﻫ2.飞机飞行动画的制作:游戏中飞机是从游戏窗口左边随机消灭的,但是飞机的飞行路线是事先确定好的,我们可以在制作过程中依据实际需要制作一些飞机沿肯定路线飞行的Motion动画,使用GuideLine引导线可以很便利的实现,然后在游戏中分别调用即可,本游戏预先制作了三中不同的飞行路线,这里以其中一种举例说明,其它的制作方法完全类似。新建一个Movieclip元件,命名为mPlane1,进入元件的编辑状态后,在图层layer1的上面插入一个引导层,在引导层上使用铅笔工具任意绘制一条曲线,然后将图层连续到第120桢,如图5所示:图5然后将元件mPlane拖到图层layer1的第1关键桢,放置到曲线的左边的开头端点,飞机会自动吸附到此端点,接着在属性面板中设置飞机的Instancename为airplane。在第120桢插入一个关键祯,同样的将飞机拖到曲线的右边的端点,也会自动吸附上去,最后,在第1祯到第120祯的任意祯上单击鼠标右键,选取CreatMotionTween命令即可,这样就创建了飞机从曲线的左端点沿曲线运动到右端点的运动效果。最后还需要添加一个图层Action,用来设置Action动作脚本,在第1桢添加如下as:varplaneDepth=_root。pDepth;在最后一桢(120祯)添加如下as:_root.numPlane--;this。removeMovieClip();依据同样的方法分别制作元件mPlane2和mPlane3,和mPlane1的唯一不同点就是引导层的曲线不一样.3.制作瞄准镜:游戏中玩家可以掌握的唯一对象就是瞄准镜,可以用它瞄准并射击敌机,新建一个Movieclip元件,命名为mPointer,在编辑区中使用椭圆工具绘制一个正圆,然后在正圆中绘制四条方向不同的直线即可,如图6所示:图64.云彩的制作:既然是空战,天空中当然少不了白云,并且适当的在游戏中加入白云这样的对象,可以使游戏更生动和逼真,游戏中的白云是使用Action动作脚本随机复制并进行掌握的,所以这里我们新建一个Movieclip元件,命名为mCloud,进入元件编辑状态后,使用铅笔工具的Ink绘制模式,绘制一个弯曲的闭合区域,并将图层连续到第5祯,如图7所示:图7

接下来需要添加复制和掌握白云的Action动作脚本,新建一个图层,分别在第1,3,5三祯插入三个关键祯,给第一祯添加如下AS:this。_x=575;this._y=30+random(300);speed=2+random(5);给第3祯添加如下AS:this._x-=speed;给第5祯添加如下AS:if(this._x〈-35)else{gotoAndPlay(_currentframe—2);}5.飞机被击落的效果:游戏中飞机如果被击落,如果简洁的来做,只需要设置飞机消灭即可,不过为了增强游戏的观赏性,我们这里专门来设计以下飞机被击落的效果,而且会带有爆炸的声音。新建一个Movieclip元件,命名为mDown,进入元件的编辑状态后,首先添加三个图层分别为down,planedown和explord,在图层explord的第一祯绘制一个如图8所示的多角形,并填充上适当的颜色:图8然后在第3祯插入一个关键祯,在属性面板上设置此多角形的Alpha透明度值为15%,最后建立第1到第3祯的Motion运动过渡,这样就实现了飞机被击中的瞬间爆炸的效果。接下来制作飞机下落的效果。在图层planedown的第2祯插入一个关键祯,将元件Mplane拖进编辑区,使用旋转工具将飞机旋转90度,使飞机头冲下,然后在第10祯插入一个关键祯,将飞机向下移动一段直线距离,并适当降低飞机的Alpha透明度值,最后建立第2祯到第10祯的Motion运动过渡效果,这样飞机被击中后下落并消灭的效果也有了。不过如果飞机在下落过程中,能有冒烟的效果就更完善了.所以我们在图层down的第4祯插入一个关键祯,然后使用椭圆工具绘制个竖直的扁椭圆,并填充上黑色,在第10祯插入关键祯,调整椭园的外形并设置降低其透明度,同样建立一个Motion运动过渡效果。ﻫ然后插入一个图层sound,用来设置飞机下落的声音效果,从外部导入一个爆炸的音效,然后选中图层sound,从属性面板的sound下拉列表中选择所导如的身影,最后将此层也连续到第10祯,时间线如图9所示:图9最后还要添加一些Action动作脚本对其加以掌握。新建一个图层ACTION,在第1,2,和10祯分别插入一个关键祯,然后给第一祯添加如下AS:this._x=_root。expX;this。_y=_root.expY;给第2祯添加如下AS:this._x=_root。expX;this。_y=_root。expY;给第10祯添加如下As:this.removeMovieClip();6.制作记时器:游戏是有肯定时间掌握的,所以还需要添加一个记时器,使用动态文本可以便利的实现,新建一个Movieclip元件,命名为mTime,在元件编辑状态下,使用文本工具绘制一个矩形文本框,然后在属性面板中设置其为Dynamic动态文本,这样就可以用Action对其中的内容加以掌握了,设置其变量名为rTime,然后在文本框前面输入提示信息,如图10所示:图10然后新建一个层,在第一祯添加如下AS:now=newDate();//新建一个Date对象startTime=now。getTime();//设置开头时间为系统时间playTime=_root.playTime;rTime=playTime;在第三祯添加如下AS:now=newDate();currentTime=now。getTime();rTime=playTime—int((currentTime-startTime)/1000);if(!rTime){_root.gotoAndPlay(”reStart");stop();}//显示并掌握记时器中的时间在第5祯添加如下AS:gotoAndPlay(_currentframe-2);到此为止,游戏中需要的元件大部分筹备好了,下面就可以开头布置主场景了。ﻫ二:布置主场景1.首先将默认图层layer1重命名为background,使用矩形工具绘制一个和舞台一样大小的矩形,并填充上天蓝色,将图层连续到第50祯。2.新建两个图层分别为start和gun,在start图层上用来设置游戏的开头界面,使用文本工具输入游戏的名称,并将瞄准器放置到图层gun中,并在属性面板中设置瞄准器的Instancename为pointer,如图11所示:图113.在图层gun的第22祯插入关键祯,输入游戏时间已到的消息,如图12所示;图124.新建一个图层命名为score&time,用来放置记分器和记时器,将记时器mTime放到舞台下面靠右的位置,然后在下面靠左的位置绘制一个动态文本框,设置其变量名为score,用来记录游戏的得分,如图13所示:图13

三:给游戏添加Action动作脚本最后的游戏就是添加Action动作脚本了。新建一个图层,命名为ACTION,设置第2祯的祯标签为start,设置第9祯的祯标签为dup,设置第15祯的祯标签为gotoDup,设置第22祯的祯标签为reStart。在第一祯添加如下AS:Mouse.hide();startDrag("/pointer",true);//游戏开头前,首先隐藏鼠标,然后使瞄准器变为可拖动状态sShoot=newSound();sShoot。attachSound(”sShoot");//新建一个sound声音对象,然后从外部导入射击的音效Sshoot,使用attachsound方//法将此声音绑定sExp=newSound();sExp。attachSound("sExp");////新建一个sound声音对象,然后从外部导入射击的音效Sexp,使用attachsound方//法将此声音绑定stop();在第2祯添加如下AS:score=0;//设置初始得分为0playTime=100;//设置游戏时间为100秒varexpX;varexpY;//定义两变量,代表飞机的坐标cDepth=100;pDepth=0;numPlane=0;numCloud=0;//定义变量,分别代表飞机和云的深度和数量_root。attachMovie(”mP","pointer",300);startDrag("/pointer",true);在第9祯添加如下AS:if(Math.random()〈0.2&&numCloud<5){numCloud++;_root。attachMovie("mCloud",”c”+cDepth,cDepth);cDepth=(++cDepth)%100+100;}//复制白云if(Math.random()<0。3&&numPlane<7){_root.attachMovie("mPlane"+(1+random(3)),"P"+pDepth,pDepth);numPlane++;with(eval(”/p”+pDepth)){_x=-20-random(120);_y=150+random(60);}pDepth=(++pDepth)%100;}//复制飞机,并使用随机函数设置飞机消灭的坐标在第15祯添加如下AS:gotoAndPlay("Dup");//返回到祯Dup复制飞机在第22祯添加如下AS:_root。pointer。removeMovieClip();//游戏结束后,从游戏中删除瞄准器在第50祯添加如下AS:Mouse.show();//显示鼠标for(i=0;i<100;i++){removeMovieClip(”/c"+(100+i));removeMovieClip("/p"+i);}stop();//删除游戏中全部复制出来的飞机和白云最后的时间线如图14所示:图14到这里,一款精彩的空战射击游戏就制作完成了,您可以依据相像的制作方法,制作一款比较传统的纵版射击游戏。此实例其实是设计空战类射击游戏的通用思路,其它飞行射击游戏其实是在此基础上扩展成的,所以还可以进一步丰富游戏的功能,加强游戏的可玩性.Flash飞行游戏制作全解Flash始终是大家喜爱的交互多媒体开发工具,Flash游戏则以简洁、耐玩,而深受用户喜爱.看似简洁多变的Flash游戏,其制作并不难.本文以一款传统的飞行游戏制作为例,说明其制作全过程,信任在你阅读完本文后,也可以通过自己的想象,制作出心仪的游戏来。一、飞行游戏制作思路分析这是一款相对传统的飞行游戏。它使用上、下、左、右键掌握飞机的运行方向,Shift键放射子弹,空格键放射导弹。游戏中共有两种敌机,一号敌机的飞行方向是由下而下,二号敌机是由左至右,两种敌机的飞行轨迹都是弧线的、随机的。ﻫ在游戏中我们添加了几组数据,以增加游戏的刺激性。例如,装备库的设计,它可以随机添加一些装备,以供主控飞机使用。这其中包括有子弹的速度、导弹的个数、飞机数量,以及主控飞机的飞行速度。装备库的设计,会大大增加游戏的娱乐性。另外,在BOSS敌机的设计中,我们使用了利用弧度换算角度的公式,使BOSS敌机可以放射一种子弹,跟踪主控飞机的坐标。信任在这些设计中,会让大家品尝到不同的数学公式,在游戏制作中的妙用。注:本文全部源程序及素材下载地址为HYPERLINK”http://www.itbook.com.cn/hdb/fj_game.rar"http://www.itbook。com。cn/hdb/fj_game.rar.ﻫ二、游戏界面设计1.制作开头界面每一个游戏都有一个开头界面,供游戏者选择,我们在第1帧中制作游戏的开头界面。启动FlashMX2004,请在第1帧中加入stop()代码,然后制作一个start按钮,当按钮点击时跳转到下一场景.如图2所示。按钮的内容如下:on(press){gotoAndPlay("Scene2",1)}

2.制作星空按下Shift+F2组合键,打开“场景”面板,点击“+”按钮新增加一个场景,进入场景2,开头游戏的制作.将“图层1”更名为scene以制作星空。其实,这些星空都是用圆形绘图工具绘制上去的,它们的大小只有一个或是两个像素,我们可以使用复制,然后再对齐的方式,使它们布满场景。ﻫ全选这些亮点,按F8键将其转换成影片剪辑,将这个影片剪辑复制3次,然后放置在一个影片剪辑中,让它们并排向下循环移动即可。3。变量设置新建一个图层,命名为fenshu,使用文本输入工具,在屏幕下方输入:“现在分数:"、“子弹速度”、“子弹类型:”、“导弹数量:”、“飞机速度:”、“飞机数量:"等文字内容.新建一个图层,命名为score,在工具箱中点击“文本工具”按钮,然后在“属性”面板中更改其为“动态文本”,在“现在分数:”的后面拖出一个输入框,在“属性”面板中将“变量”更改为score。ﻫ使用相同的方法,新建shot_speed图层,在“子弹速度:”后制作一个动态文本框,变量名称为shot_speed。新建一个shot_sty图层,在“子弹类型:"后制作一个变量名为shotsty_txt的动态文本框。新建一个plane_speed图层,在“飞机速度:”后制作一个plane_speed的动态文本框。新建missilenum图层,使用绘图工具绘制作如图5所示的图形,选取这些图形按下F8键将其转换成影片剪辑,命名为missilenum_mc,在“属性”面板“实例名称"框中输入“missile_num"。

进入missilenum_mc影片剪辑,在第3、4、5、6帧处按F6建立关键帧,在第6帧处加入stop()代码,然后将第1帧中的导弹全部删去,第2帧保留一个,第3帧保留2个,以此类推。回到场景,新建一个plane_num图层,取实例名为“planenum_mc”,依照上一步的方法制作。ﻫ回到场景,在第1帧中加入如下代码,新建一个info图层文件夹,将上面的这些图层放置其中:score=0shot_speed=10shotsty_txt="单弹道”missilenum=6plane_speed=10planenum=4shot_sty=1missile_text=6代码说明:这里主要是为这些变量赋值,score等于分数,初始值为0,shot_speed等于子弹速度,初始值为10;shotsyt_txt等于子弹类型,开头时它为单弹道;missilenum表示导弹数量,初始值为6;plane_speed表示飞机速度,初始值为10;planenum表示飞机数量,初始值为4;子弹类型的变量等于1;导弹类型的变量等于6.三、主机制作1.主机结构在场景中新建一个plane图层,使用绘图工具绘制一个飞机.ﻫ选中飞机按F8键将其转换成影片剪辑,名称为plane_mc,双击进入该影片剪辑,新建一个图层,绘制一个矩形,如图8所示,按F8键将其转换成影片剪辑,取实例名称为plane_hit,再将透明度降为0.由于Flash的碰撞测试是以矩形为准的,所以,我们绘制矩形影片剪辑,用来碰撞测试。回到场景,为飞机影片剪辑取实例名称为plane_mc,按F8键转换成影片剪辑,双击进入影片剪辑开头制作,新建一个图层,在第30帧建立关键帧,绘制一个渐淡的红色圆球,将其转换成影片剪辑,名称为plane_bo。如图9所示。在plane_bo影片剪辑中,第5帧制作它被放大,第10帧缩小变黄,第20帧渐渐消灭。新建一个图层,导入音乐文件fx13431_bomb8。mp3,放置在第1帧。双击空白区域回到上一级影片剪辑,新建8个图层,分别复制plane_bo影片剪辑,放置在第30帧以后的位置,隔两帧放置一个。等于是让8个爆炸的圆球依次播放,仿照爆炸效果.新建一个图层,在第1帧加入代码:plane_mc。_y=550plane_mc._x=0_root.command_bl=false_root。hittest_bl=false_root.shot_bl=false代码说明:在第1帧,我们让主控飞机的Y坐标等于550,X坐标等于0,让代表可以被掌握的command_bl变量为假,表示在这1帧时,主控飞机不能被掌握,hittest_bl敌机的热区检测为假,也就是主控飞机不能被击爆,shot_bl子弹可以放射的变量为假。在第2帧加入代码:plane_mc._y—=10plane_mc._alpha=30代码说明:主控飞机的Y坐标等于Y坐标减去10,透明度等于30。在第3帧加入代码:if(plane_mc._y<=0){gotoAndPlay(4)}else{gotoAndPlay(2)}代码说明:当主控飞机的坐标小于等于0时,开头播放第4帧,如果不然,将播放第2帧,实际上等于让飞机以10个坐标的速度递减.在第4帧加入代码:_root。command_bl=true_root.hittest_bl=false_root.shot_bl=true_root.shot_bl=true_root.shot_sty=1_root.shot_speed=10_root.plane_speed=10_root.missile_num.gotoAndPlay(1)代码说明:在前3帧中,实际是一个让主控飞机飞入场景的动画,而现在,为一些初始变量赋值.在第30帧加入代码:stop()plane_mc._alpha=100_root.command_bl=true_root.hittest_bl=true代码说明:在这一帧,我们设置透明度为100,主机可以被掌握,碰撞测试也可以开头。在第31帧加入代码:_root.command_bl=false_root.hittest_bl=false_root。shot_bl=false代码说明:如果主控飞机被击爆,那么这个影片剪辑应该开头播放了,主机不能被掌握,碰撞测试和子弹都不能放射。在第65帧,也就是最后1帧加入代码:if(_root.planenum_mc。_currentframe〈2){stop()}if(_root.planenum_mc._currentframe!=1){_root.planenum_mc。gotoAndStop(_root.planenum_mc。_currentframe—1)gotoAndPlay(1)}代码说明:当根名目下的planenum_mc影片剪辑的当前帧小于2时,本影片剪辑将不再循环播放。如果planenum_mc影片剪辑的当前帧不等于1时,那么代表主控飞机个数的planenum_mc影片剪辑将后退1帧。本影片剪辑将重新开头播放。也就是说,planenum_mc影片剪辑一共有4帧,在正常情况下,本影片剪辑应该也只播放4次,除非有其他的外界程序干扰。2。主机飞行掌握回到场景中,为主控飞机的影片剪辑添加实例名称为plane,在第1帧加入代码如下:plane.onEnterFrame=function(){if(command_bl){if(Key.isDown(Key.LEFT)&&plane。_x>30){plane._x—=plane_speed}if(Key。isDown(Key。RIGHT)&&plane。_x〈620){plane._x+=plane_speed}if(Key.isDown(Key。UP)&&plane._y>30){plane._y-=plane_speed}if(Key。isDown(Key。DOWN)&&plane。_y<420){plane。_y+=plane_speed}}代码说明:当plane影片剪辑开头播放时,每播放1帧执行一次。如果command_bl变量为真时,也就是我们刚才设置的主控飞行开关为真时;当按键中的LEFT键按下,而且plane影片剪辑的X坐标大于30时,plane的X坐标等于它的X坐标减去plane_speed变量,也就是飞机开头向左移动,其他代码效果相同。3.子弹放射方法回到场景中,新建一个shot图层,在场景的外面,使用绘图工具绘制一个子弹的外形,如图10所示,选中它并按F8键转换成影片剪辑,名称为shot,输入实例名称为shot.双击进入影片剪辑,在第2帧建立关键帧,放置2个这样的子弹在中心位置。在第3帧放置4个这样的子弹在中心位置.第1帧加入stop()代码,让影片剪辑在开头停止播放.回到场景中,给shot对象加入如下代码(注意是给对象加代码,而不是帧),方法是鼠标右键选择子弹对象,选择“动作”命令,然后输入代码.onClipEvent(enterFrame){this._y—=10+random(_root.shot_speed)}代码说明:当影片剪辑开头播放时,它的Y坐标等于它的Y坐标减去10加上shot_speed的随机数。在场景的第1帧,我们刚才主控飞机加掌握代码的地方,在第1行加上n=0,在其他按键代码的后面,添加如下代码:if(Key.isDown(Key。SHIFT)&&_root.shot_bl){if(n<50){shot.duplicateMovieClip("shot”+n,n+100)_root["shot”+n].gotoAndStop(shot_sty)_root["shot"+n]._x=_root。plane。_x_root[”shot"+n]._y=_root.plane._y—10n++}elseif(n>=50){n=0}}代码说明:当按下Shift键时,且shot_bl子弹掌握开关为真时;当n小于50时,shot影片剪辑开头复制,一共复制50个,图层深度为N+100;复制品跳转到shot_sty变量所指的那一帧;复制品的X坐标等于主控飞机的X坐标;复制品的Y坐标等于主控飞机的Y坐标减10;N递增;当N大于等于50时,N等于0。这段代码实际上就是一个子弹的放射过程,当我们按下Shift键时,影片剪辑就会不断地进行复制,而起始坐标永久都是飞机的坐标,影片剪辑本身的代码中,使它不停的向上运动,就形成了完整的子弹放射过程。4.导弹放射方法在场景中新建一个图层,命名为missile,使用绘图工具绘制一个导弹,如图11所示,转换成影片剪辑,取实例名为missile,进入影片剪辑开头编辑工作。在影片剪辑中,再次选取导弹按F8转换成影片剪辑,在第15帧建立关键帧,将导弹的坐标放置在X:0,Y:-175的位置上,从第1帧建立动画,新建一个图层,在第15帧绘制一个爆炸的圆形渐变图,类似飞机爆炸的那种,但要大一些。选中该图层,按F8键转换成影片剪辑,在第40、70帧建立关键帧,在第40帧把爆炸效果缩放到格外大,大到你喜爱的程度,然后建立Motion运动。新建一个图层,导入音乐文件fx13443_explomed.mp3放在第1帧,在第1帧加入如下代码:stop()this._x=5000this._y=5000代码说明:在第1帧停止播放,影片剪辑的X坐标和Y坐标等于5000。回到场景中,在主控飞机的代码中,加入如下代码:if(Key。isDown(Key。SPACE)&&_root。missile._currentframe==1&&shot_bl){if(missile_text>1){missile.play()missile。_x=plane._xmissile._y=plane._ymissile_text--missile_num.gotoAndStop(missile_text)}}代码说明:当按下空格键时,且missile影片剪辑的当前帧等于1,当shot_bl子弹开关为开时;当missile_text变量大于1时;导弹影片剪辑开头播放;导弹影片剪辑的坐标等于主控飞机的坐标;Missile_num也就是我们最初制作的导弹数量的影片剪辑跳转到missile_text变量的位置。四、制作装备彩蛋回到场景中,新建一个图层,命名为brand,使用绘图工具绘制如图12所示的内容。转换成影片剪辑。把这个图形放置在Y:1000,然后进入影片剪辑编辑,选取文字内容,按F8键转换成影片剪辑,命名为brand_mc,取实例名为brand_mc。进入brand_mc影片剪辑,在第1帧输入内容“子弹加速”,在第2、3、4、5帧分别输入内容“子弹样式”、“飞机加速"、“增加飞机”、“增加导弹”。在第1帧加入gotoAndStop(random(5)+1)代码,让影片剪辑直接跳转到相应的帧。回到场景中,选取这个装备图标,为对象加入代码,记得吗?在子弹制作中,我们已经给对象加过代码了:onClipEvent(enterFrame){this。_y+=5if(this._y〉=3000){this._y=—1000this._visible=1}if(this。_y〈=-100){this。brand_mc.gotoAndPlay(1)this。_x=random(650)}if(this.hitTest(_root。plane)){this._visible=0this。_y+=200if(this。brand_mc._currentframe==1){_root.shot_speed=_root.shot_speed+10}if(this.brand_mc._currentframe==2&&_root。shot_sty<4){_root.shot_sty+=1if(_root。shot_sty==2){_root。shotsty_txt=”双弹道"}elseif(_root。shot_sty==3){_root.shotsty_txt="四弹道"}}if(this.brand_mc._currentframe==3){_root。plane_speed+=1}if(this.brand_mc._currentframe==4&&_root.planenum_mc._currentframe<5){_root。planenum_mc.gotoAndStop(_root。planenum_mc._currentframe+1)}if(this.brand_mc._currentframe==4&&_root。planenum_mc._currentframe==4){_root.score+=2000}if(this.brand_mc._currentframe==5&&_root.missile_num。_currentframe<6){_root.missile_num。gotoAndStop(_root.missile_num._currentframe+1)}}}代码说明:当影片剪辑开头播放时,它的坐标等于它的坐标加上5。当它的坐标大于等于3000时,它的坐标等于负1000,它的显示参数为可视。当它的坐标等于负100时,它影片剪辑中的brand_mc也就是刚才制作的文字影片剪辑开头播放第1帧,实际上也就是跳转到任意一帧,它的X坐标等于650的随机数,等于是屏幕的任意位置。当它碰撞到主控飞机时,它的显示为假,也就是说它变得不行见,同时它的坐标加上200.当它的brand_mc影片剪辑的当前帧等于1时,shot_speed子弹速度等于再加上10.当它的brand_mc影片剪辑的当前帧等于2而且子弹样式小于4时,子弹样式等于再加上1,如果子弹样式等于2,那么shotsyt_txt动态文本就显示双弹道,如果等于3就显示四弹道。如果它的brand_mc影片剪辑的当前帧等于3,那么plane_speed飞机速度就等于再加上1,如果它的brand_mc影片剪辑的当前帧等于4而且planenum_mc的当前帧小于5,那么planenum_mc影片剪辑的当前帧等于再加上1帧,这样就等于增加了一个主控飞机。如果它的brand_mc影片剪辑的当前帧等于4而且planenum_mc的当前帧等于4,也就是说主控飞机已经满了,那么就加上2000分。如果它的brand_mc影片剪辑的当前帧等于5而且missile_num导弹数量的当前帧小于6,那么就增加一个导弹。五、制作敌机1.一号敌机制作方法新建一个图层,命名为enemy_a,绘制一个如图13所示的敌机,选中该敌机按F8键,转换成影片剪辑,名称为enemya_mc,实例名也是enemya_mc,双击进入影片剪辑.在第1帧加入代码stop(),让影片停止播放,新建一个图层,在新图层的第2帧制作一个爆炸的效果,在最后帧加入如下代码,这等于删去上一级影片剪辑,而分数再加上100.removeMovieClip(_parent。_parent)_root。score+=100再次新建一个图层,在第2帧放入fx13431_bomb8。mp3音乐文件,记得要使用stream数据流的方式,双击空白区域回到场景。在场景中选中该影片剪辑,放置在场景以外的左上角,再次按F8键转换成影片剪辑,名称为enemya_eft,实例名为enemy_a,进入影片剪辑,在图层1上加入一个引导图层,使用绘图工具绘制一条曲线,如图14所示。将两个图层都延缓到第60帧,将第1帧的敌机放置在引导线的起始,在最后1帧将敌机放置到引导线的结尾,建立Motion动画,在最后1帧加入removeMovieClip(_parent)代码,删去上一级影片剪辑。这也就是说,无论敌机是被击爆的,还是飞行结束,它都将消灭,所不同的就是加不加分而已。2。一号敌机的复制方法回到场景,选中敌机按F8键转换成影片剪辑,名称为enemya,实例名称为enemy_a,选取后再次按F8键转换成影片剪辑,名称为enemy_a,实例名称为enemya。双击进入影片剪辑.在第10帧按F5键,新建一个图层,在第1帧,加入代码:enemya_i=0enemya_max=10enemya._visible=0代码说明:Enemya_i变量等于0,enemya_max变量等于10,而敌机为不显示。在图层2的第2帧加入代码:if(enemya_i〈ENEMYA_MAX){<p>enemya.duplicateMovieClip("enemya"+enemya_i,enemya_i)this["enemya”+enemya_i]._x=random(650)this["enemya”+enemya_i]。_y=enemya。_y—random(200)+100enemya_i++}if(enemya_i>=enemya_max){enemya_i=0}代码说明:当enemya_i变量小于enemya_max时,Enemya影片剪辑开头复制,复制品的X坐标等于650的随机数,复制品的Y坐标等于敌机的Y坐标减去200的随机数再加上100;Enemya_i变量递增;当enemya_i变量大于等于enemya_max变量时,它的值为0.在第10帧加入代码gotoAndPlay(2),这样就可以完成复制,让每10帧,就复制一个敌机。3.一号敌机碰撞测试右键点击敌机,选择“动作命令”,为对象加入如下代码:onClipEvent(enterFrame){if(this.hitTest(_root.plane.plane_mc.plane_hit)){this.enemy_a。enemya_mc.play()this.enemy_a.enemya_mc。_x=this。enemy_a.enemya_mc。_xthis。enemy_a.enemya_mc。_y=this.enemy_a.enemya_mc._y_root。plane。play()}if(this.hitTest(_root。missile)){this.enemy_a。enemya_mc。play()this.enemy_a.enemya_mc._x=this.enemy_a。enemya_mc._xthis。enemy_a.enemya_mc._y=this.enemy_a。enemya_mc._y}for(j=1;j<50;j++){if(this.hitTest(_root["shot"+j])){this.enemy_a.enemya_mc。play()this。enemy_a.enemya_mc。_x=this.enemy_a.enemya_mc。_xthis.enemy_a.enemya_mc。_y=this.enemy_a。enemya_mc。_y}}}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论