




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录Flash游戏制作常用代码解析2FLASH游戏制作基础:响应键盘的四种方法8Flash游戏制作-空战11Flash飞行游戏制作全解18Flash游戏制作-迷宫28Flash游戏制作规划与流程漫谈35用Flash制作互动的小人44常见的飞机发射子弹的控制48一个完全使用AS2编制的飞机游戏之制作详解.49Flash游戏制作常用代码解析1.获取随机数随机函数在flash游戏制作中很常用,例如在拼图游戏中,每次开始新的游戏时可以利用随机函数使图块获得新的位置,试想一个千篇一律的游戏谁会有兴趣玩下去。现在我们有两种产生随机数的方式:random()和Math.random(),举例来讲,如果我们相
2、随机赋给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.66887632058933x=2,y=4.39878350123763x=0,y=
3、0.522367884404957x=3,y=2.95675310306251x=5,y=4.03038211166859x=2,y=0.223042098805308区别一目了然。2.获得鼠标及MC(MovieClip)的位置另外一个在flash游戏制作使用频率比较高的参数就是坐标了,鼠标的坐标和MC的坐标的获得方式是不同的鼠标的坐标可以用_xmouse和_ymouse获彳导,MC的坐标可以用MovieClip._x和MovieClip._y获得。值得注意的是在获得坐标时要考虑实际需要的坐标值是相对的还是绝对的,下面给出了一个典型的获得鼠标相对坐标和绝对坐标白例子(例1):其中浅色的正方形是
4、一个被命名为mc的MovieClip,四个文本框属性均被设置为DynamicText(请参阅FlashMX文本工具详解),场景中的两个用于获得变量x_timeline和y_timeline(绝对坐标,正方形中的两个用于获得变量x_movieclip和y_movieclip(相对坐标),为了获得变量,需要在文本框的属性面板中的Var属性中分别填入相应的变量名,与上面例子形成循环的方式一样,在第一帧中写下面的AS,第二帧创建为内容帧:x_timeline=_root._xmouse;y_timeline=_root._ymouse;x_movieclip=mc._xmouse;y_moviecli
5、p=mc._ymouse;注意:场景的坐标原点为其左上角,坐标值向右向下递增,为正值(这与我们通常意义白坐标并不相同);MC的坐标原点是编辑MC时的中心,坐标象限见图1.x<0.y<0)(x>0,y<0)x<Ory>0)(OO,y>0)i坐标象限获彳导MC坐标的方法与上面说的大同小异,我们将在下面的MC属性简介中做介绍。3.MC常用属性简介属性用法说明可获得可设置取值范围_x_yMC._xMC._y返回/设置MC的横纵坐标值YY数值_xscale_yscaleMC._xscaleMC._yscale返回设置MC的x/y轴缩放比例YY数值_alphaMC
6、._alpha返回/设置MC的透明度YY0-100_visibleMC._visible返回/设置MC的可见性YYtrue;false_width_heightMC._widthMC._height返回/设置MC的宽/高值YY数值_rotationMC._rotation返回/设置MC的角度YY数值_currentframeMC._currentframe返回MC的当前帧YN-_totalframesMC._totalframes返回MC的总帧数YN-_framesloadedMC._framesloaded返回已下载帧数YN-_nameMC._name返回/设置MC的名称YY4 .判断按键既
7、然是游戏,当然就要响应玩家的各种反应,除了鼠标,最直接的就是键盘了。响应键盘无非是判断玩家按下了哪一个键或者组合键,要实现这些其实很简单,我们既可以通过按钮或MC的事件来响应按键,也可以通过帧上的动作来响应,举例说明:(1)按钮的keyPress方法:先说按钮,按钮除了响应鼠标的一些动作(如:rollOver,release.)之外还有几个是响应固定按键的(如Enter,Left,Home,PageDown.),下面我们就来制作一个。建立一个按钮,拖到场景中,捆绑下面的AS:on(keyPress"")trace("按下了Left键");这样当我们在测试
8、的环境下按下左方向键后,output窗口就会显示出"按下了Left键"。下面说说怎样使MC响应按键更复杂的按键。(2)MC响应单个按键:onClipEvent(keyDown)if(Key.isDown(72)trace("按下了H键");)这样在测试的环境下按下H键,output窗口就会显示出"按下了H键",其中72是H键白kkeyCode值(其他按键白kkeyCode值将在附录中给出),如果不知道某个键的keyCode值也没关系,Flash为我们提供了getCode函数,将上面AS中的72替换成Key.getCode("
9、H")会得到同样的效果。(3)MC响应组合键:onClipEvent(keyDown)if(Key.isDown(72)&&Key.isDown(17)trace("您按下的组合键是Ctrl+H");)在测试的环境中按下Ctrl+H键,output窗口就会显示出"您按下的组合键是Ctrl+H"(4)利用帧上的动作响应按键:新建一个flash文件,利用上面讲过的:在第一帧写AS,第二帧创建内容帧的方法,使影片形成循环以便随时进行判断,然后在第一帧中写入下面的几组代码,分别进行试验;如果你使用的是MX,也可以不建立第二帧,而是用试验
10、代码代替_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("按下
11、了Ctrl"+temp+"键");注:对于MC的(2)(3)两种情况,可以将keyDown事件改为enterFrame事彳,其中(2)还可以替换为keyUp事件.附:键码值表字母和数字键的键码值(keyCode)按键键码按键键码按键键码按键键码A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69N78W87553F70O79X88654G71P80Y89755H72Q81Z90856I73R82048957数字键盘上的键的键码值(keyCode)功能键键码值(keyCode)按键键码按键键码按键键码按键键码0968
12、104F1112F71181979105F2113F8119298*106F3114F9120399+107F4115F101214100Enter108F5116F111225101-109F6117F121236102.1107103/111控制键键码值(keyCode)按键键码按键键码按键键码按键键码BackSpace8Esc27RightArrow39-189Tab9Spacebar32DownArrow40.>190Clear12PageUp33Insert45/?191Enter13PageDown34Delete46'192Shift16End35NumLock14
13、4(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
14、的实际边界为限.(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
15、的depth属性相同(即位于通一深度,那么先前被复制的MC将被新复制的MC替换掉(不管他们是否属于同一被复制目标,这个特性经常被我用来制作鼠标跟随的效果,即炫又简单,你试试:)再来说说MC的卸载,大家对这个MC的复制的"双胞胎兄弟”的重视程度好像远不如他的"兄长",因为我经常在论坛中看到类似于"为什么复制出的MC在跳到其他帧,甚至到其他场景后依然存在?"的问题,其实解决方法很简单,就是MC的卸载:removeMovieClip(target);只要将要被卸载的MC的name替换掉语句中的target就可以成功的完成卸载任务。7 .获取影片运行时
16、间getTimer();这个函数用以返回自影片开始播放时起已经过的毫秒数,虽然是个很简单的函数,但用利用率却很高,尤其是在一些需要计时的游戏中。需要说明的是:毫秒与秒的计算公式为1毫秒=1/1000秒;函数以影片第一次播放的开始时刻为0,不受任何其他因素影响,也就是说如果你想从头开始计时,那么只有重起player,或者定义一个变量来存放getTimer的值,然后用getTimer与变量做减法运算以便得到新的运行时间,看下面的例子(例5).8 .颜色的设置说到颜色必须先说说什么是对象,对象就是预先定义好的用来访问某些特定类型的信息的集合,大多数预定义对象都有自己的方法(被指派给一个对象的函数被称
17、为这个对象的一个方法,你可以通过这些方法得到不同类型的返回值或执行某个动作.预定义对象包括普通对象和顶级对象,普通对象在使用前需要创建(我们将要提到的Color对象就属于这一类),而顶级对象则可以直接调用(入下面要说的Math对象)下面我们详细介绍一下Color对象,它包含四种方法:getRGB():返回由最后一次setRGB调用设置的数值;getTransform():返回由最后一次setTransform调用设置的转换值;setRGB(0xRRGGBB):指定Color对象实例的RGB颜色,调用此方法会覆盖由setTransform方法设置的任何以前的设置;setTransform(col
18、orTransformObject):设置Color对象实例的颜色转换信息colorTransformObject参数是通过newObject构造函数创建的通用对象它具有指定颜色的红、绿、蓝和alpha(透明度)成分百分比和偏移量数值的参数,颜色转换对象的参数与"高级效果"对话框中的设置相对应,定义如下:ra是红色成分的百分比(-100到100)rb是红色成分的偏移量(-255到255)ga是绿色成分的百分比(-100到100)gb是绿色成分的偏移量(-255到255)ba是蓝色成分的百分比(-100到100)bb是蓝色成分的偏移量(-255到255)aa是alpha的百分
19、比(-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=r
20、a:'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
21、的颜色改变对象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,一提到这个
22、名词很多人是不是会感到"恐惧",但在游戏的制作中它可是必不可少的。这里我们利用Math的atan方法来制作一个永远指向鼠标的指针(例6),其他的三角函数以及数学函数的用法和注意事项请参考附录中的数学函数表.新建一个MC,画一个长度为70的水平指向右侧的箭头(箭头根部放在中心点上),回到场景,Ctrl+J修改影片的大小为200*200,将指针从库中拖入场景,命名为"pointer",修改坐标为100*100,在主timeline的第一帧中写如下AS:x=_xmouse-100;y=_ymouse-100;将坐标中心移到场景的中心tan=Math.atan(
23、y/x)*180/Math.PI;/注意要使用弧度表示的角度值if(x>=0&&y>=0)r=Math.round(tan);elseif(x>=0&&y<0)r=Math.round(360+tan);elser=Math.round(180+tan);判断各种不同的情况,通过运算使r值在0-360之间pointer._rotation=r;将r值付给.rotation放置一个用来显示r值的文本框属性为DynamicText,获取变量(Var)为"r",第二帧建立内容帧,Ctrl+Enter测试。附:数学函数表(Ma
24、th)方法描述语法说明计算并返回由参数x指定的数字的绝abs对彳I.Math.abs(x)以弧度为单位计算并返回参数x中指acos定的数字的反余弦值.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分别
25、指定点的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.f100r(12.5)
26、将返回值: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.f100r(Math.random()*(b-a+1)+a)round将参数x的值向上或向下舍人为最接近的整数并返回值Math.round(x)sin计算并返回以弧度为单位指定的角度的正弦值Math.sin(x)换算公式参见cossqrt计算并返回指定数字的平方根
27、Math.sqrt(x)x>=0tan计算并返回指定角度的正切值Math.tan(x)换算公式参见cos以上我们向大家介绍了Flash游戏制作中最常用的一些ActionScript,掌握了这些基本控制方法,就可以制作出很多有意思的Flash游戏,同时在制作的过程中你还会发现更多的技巧,欢迎投稿和大家一起交流。FLASH游戏制作基础:响应键盘的四种方法响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛的使用,尤其是在FLASH游戏制作中,如果缺少了响应键盘的方法,那是不可能的,而响应键盘的方法主要的四种,分别是:1、利用按钮进行检测2、利用KEY对象3、利用键盘侦听的方法4、
28、利用影片剪辑的keyUp和keyDown事件来实现响应键盘只有熟练掌握了这些方法,然后加以变通的话,就会得到很多意想不到的效果,下面我就结合理论和自己的想法简要的介绍一下。第一种响应键盘的方法:利用按钮进行检测来实现响应键盘在按钮的on事件处理函数中不但可以对鼠标事件作出响应,而且可以对键盘事件作出响应。如在按钮的动作面板中加入如下所示的代码,在敲击键盘上的X键时输出窗口中将提示:Xispressed在按钮上加上:on(keyPress"x")trace("Xispressed");但是要注意的是:检测键盘上的字母键时,字母都应为小写。如果要检测键盘中的
29、特殊键,Flash中有一些专门的代码来表示它们,下面列出了一些常用的功能键的表示代码:如要检测键盘上的键,可以使用下面的ActionScript:on(keyPress"")trace("Leftispressed");另外,你可以在一个按钮中加入若干个on函数,也可以在一个on函数中结合多种事件,这使您可以为按钮定义自己熟悉常用的快捷键,如下所示:on(release,keyPress"")_root.myMC.prevFrame();一on(release,keyPress"")_root.myMC.nextF
30、rame();一上面的第一个语句实现单击按钮或按键盘上的左方向键,控制影片剪辑myMC回退1帧,而上面的第二个语句实现单击按钮或按键盘上的右方向键,控制影片剪辑myMC前进1帧。第二种响应键盘的方法:利用Key对象来实现响应键盘的操作利用按钮检测按键动作很有效,但是并不利于检测持续按下的键,所以不适合于制作某些通过键盘控制的游戏。这时,您就需要用到Key对象。Key对象包含在动作面板的“对象”/“影片”目录下面,它由Flash内置的一系列方法、常量和函数构成。使用Key对象可以检测某个键是否被按下,如要检测左方向键是否被按下,可以使用如下ActionScript:if(Key.isDown(K
31、ey.LEFT)trace("Theleftarrowisdown");函数Key.isDown返回一个布尔值,当该数中的参数对应的键被按下时返回true,否则返回false。常量Key.LEFT代表键盘上的左方向键。当左方向键被按下时,该函数返回trueoKey对象中的常量代表了键盘上相应的键,下面列出了一些基本的常量:一些功能键的表示:Key.BACKSPACEKey.ENTERKey.PGDNKey.CAPSLOCKKey.ESCAPEKey.RIGHTKey.CONTROLKey.HOMEKey.SHIFTKey.DELETEKEYKey.INSERTKey.SPA
32、CEKey.DOWNKey.LEFTKey.TABKey.ENDKey.PGUPKey.UP以上是键盘上的功能键,那么如何表示键盘上的字母键呢?Key对象提供了一个函数Key.getCode来实现这一功能,如下所示:if(Key.isDown(Key.getCode("x")trace("Xispressed");上面脚本的意思就是,利用Key.getCode函数来告诉系统你是否按下了x键,如果按下了x键以后,函数Key.isDown则会返回true,在输出窗口就会输出Xispressed。第三种响应键盘的方法:利用键盘侦听的方法来实现响应键盘(个人习惯
33、用这种方法)假设在影片剪辑的onClipEvent(enterFrame)事件处理函数中检测按键动作,而影片剪辑所在的时间轴较长,或计算机运算速度较慢,就有可能出现这种情况:即当在键盘上按下某个键时还未来得及处理onClipEvent(enterFrame)函数,那么按键动作将被忽略,这样的话,很多你想要的效果就会无法实现了。另外,还有一个需要解决的问题就是,在某些游戏(如射击)中,我们需要按一次键就执行一次动作(发射一发子弹),即使长时间按住某个键不放也只能算作一次按键,而Key对象并不能区别是长时间按住同一个键还是快速地多次按键。所以如果要解决这个问题,就需要用到键盘侦听的方法。你可以使用
34、“侦听器(listener)”来侦听键盘上的按键动作。要使用侦听器之前,首先需要创建它,你可以使用如下所示的命令来告诉计算机你需要侦听某个事件:Key.addListener(_root);Key.addListener命令将主时间轴或某个影片剪辑作为它的参数,当侦听的事件发生时,可以用这个参数指定的对象来响应该事件。上面的代码指定主时间轴来响应该事件。要让主时间轴对该事件作出响应,还需要设置一个相应的事件处理函数,否则设置侦听器就没有什么意义了。键盘侦听的事件处理函数有两个:onKeyUp和onKeyDown如下所示:Key.addListener(_root);_root.onKeyUp=
35、function()trace(Key.getAscii();代码的意思是,当按下一个键并释放后,输出窗口将输出你按下的那个键的Ascii码当然,你也可以使用影片剪辑作为侦听键盘的对象,只需要使用影片剪辑的路径代替_root作为Key.addListener命令的参数就可以了。比如下面代码:Key.addListener(_root.mc);_root.mc.onKeyUp=function()trace(Key.getAscii();代码的意思是,当按下一个键并释放后,输出窗口将输出你按下的那个键的Ascii码,意思差不多,但是键盘侦听对象不同,一个是影片mc,一个是主时间轴。第四种响应键盘
36、的方法:利用影片剪辑的keyUp和keyDown事件来实现响应键盘最后一种方法很容易被忽视,但是也有一定的应用价值,最重要的是把概念弄清楚。影片剪辑包含两个与键盘相关的事件keyUp和keyDown,使用它们也可以实现对按键事件的响应例如下面的代码:onClipEvent(keyDown)trace(Key.getAscii();/当按下键盘上的一个键的时候,输出窗口将输出按下的这个键的Ascii码值。函数Key.getAscii表示返回与按键相对应的ASCII码,其中ASCII码是一个整数,键盘上的每个字符对应一个ASCII码,如字母A对应的ASCII码为65,B对应的ASCII码为66,a
37、对应的ASCII码为97,b对应的ASCII码为98,+对应的ASCII码为43等。需要注意的是:只有字符键才有ASCII码,键盘上的功能键是没有ASCII码的。如果我想在输出窗口中输出与按键相对应的字符,那怎么办?这时候,你可以使用String对象的fromCharCode函数将ASCII码转换成字符,如将上例的代码改成如下所示:onClipEvent(keyDown)trace(String.fromCharCode(Key.getAscii();/意思就是说,当按下键盘的一个键,输出按下的这个键相对应的字符,当然除了功能键。关于String对象的详细解释,大家可以查看动作面板的“对象”/
38、“核心”目录下面。Flash游戏制作-空战Flash游戏制作-空战射击类游戏一直是Flash游戏制作中的一个热点,大多数Flash射击游戏都是都是纵版的,也就是游戏背景的前进方向是垂直的,这样的游戏已经司空见惯了。所以这次我们来制作一个横版的射击游戏,游戏背景和飞机的运动方向都是水平的。游戏运行后的主界面如图1所示:0HBBfH91图1游戏说明:此游戏玩家是以第一视角的模式来进行的,所谓第一视角就是游戏的界面相当于玩家的双眼,通过这样的形式,可以使游戏达到一种非常逼真的效果,仿佛您已经置身于激烈的游戏之中了。游戏中玩家可以使用鼠标控制屏幕中的瞄准镜,瞄准并射击从左边随机出现的敌机,飞机会以各种
39、路线在空中飞行以避开你的射击,如果敌机被射中后,就会从空中跌落下来,相应的玩家会得一分,在游戏规定的100秒内,尽量击落更多的敌机。制作步骤:游戏中相应元件的制作1 .既然是空战游戏,自然少不了飞机,所以首先来制作游戏中的敌机。在影片中新建一个Graphic元件,命名为gPlane,进入元件的编辑状态后,可以从外部导入一张飞机的图片,然后将其分离,稍稍加工一下即可。或者使用Flash提供的强大的绘图工具自己绘制一架飞机,如图2所示:有了飞机,还需要一个飞行员飞机才可以工作,所以再建一个状态后,使用椭圆绘图工具绘制一个简单的人头即可,如图Graphic元件,命名为gMan,进入元件编辑3所示:图
40、3接下来就需要将飞机和飞行员组合到一起了,因为游戏中需要使用Action需要将最终的组合体制作成Movieclip元件,所以再新建一个Movieclip将元件gMan和Gplane分别拖到编辑区,使用鼠标调整其相对位置,如图动作脚本对飞机进行控制,所以元件,进入元件的编辑状态后,4所示:图4这样,一架逼真的战斗机就制作完成了。2 .飞机飞行动画的制作:游戏中飞机是从游戏窗口左边随机出现的,但是飞机的飞行路线是事先确定好的,我们可以在制作过程中按照实际需要制作一些飞机沿一定路线飞行的Motion动画,使用GuideLine引导线可以很方便的实现,然后在游戏中分别调用即可,本游戏预先制作了三中不同
41、的飞行路线,这里以其中一种举例说明,其它的制作方法完全类似。新建一个Movieclip元件,命名为mPlane1,进入元件的编辑状态后,在图层layer1的上面插入一个引导层,在引导层上使用铅笔工具随意绘制一条曲线,然后将图层延续到第120桢,如图5所示:图5然后将元件mPlane拖到图层layerl的第1关键桢,放置到曲线的左边的开始端点,飞机会自动吸附到此端点,接着在属性面板中设置飞机的Instancename为airplane。在第120桢插入一个关键祯,同样的将飞机拖到曲线的右边的端点,也会自动吸附上去,最后,在第1祯到第120祯的任意祯上单击鼠标右键,选取CreatMotionTwe
42、en命令即可,这样就创建了飞机从曲线的左端点沿曲线运动到右端点的运动效果。最后还需要添加一个图层Action,用来设置Action动作脚本,在第1桢添加如下as:varplaneDepth=_root.pDepth;在最后一桢(120)添加如下as:_root.numPlane-;this.removeMovieClip();按照同样的方法分别制作元件mPlane2和mPlane3,和mPlane1的唯一不同点就是引导层的曲线不一样。3 .制作瞄准镜:游戏中玩家可以控制的唯一对象就是瞄准镜,可以用它瞄准并射击敌机,新建一个Movieclip元件,命名为mPointer,在编辑区中使用椭圆工具绘
43、制一个正圆,然后在正圆中绘制四条方向不同的直线即可,如图6所示:图64 .云彩的制作:既然是空战,天空中当然少不了白云,并且适当的在游戏中加入白云这样的对象,可以使游戏更生动和逼真,游戏中的白云是使用Action动作脚本随机复制并进行控制的,所以这里我们新建一个Movieclip元件,命名为mCloud,进入元件编辑状态后,使用铅笔工具的Ink绘制模式,绘制一个弯曲的闭合区域,并将图层延续到第5祯,如图7所示:接下来需要添加复制和控制白云的Action动作脚本,新建一个图层,分别在第1,3,5三祯插入三个关键祯,给第一祯添加如下AS:this._x=575;this._y=30+random(
44、300);speed=2+random(5);给第3祯添加如下AS:this._x-=speed;给第5祯添加如下AS:if(this._x<-35)elsegotoAndPlay(_currentframe-2);5 .飞机被击落的效果:游戏中飞机如果被击落,如果简单的来做,只需要设置飞机消失即可,不过为了增强游戏的观赏性,我们这里专门来设计以下飞机被击落的效果,而且会带有爆炸的声音。新建一个Movieclip元件,命名为mDown,进入元件的编辑状态后,首先添加三个图层分别为down,planedown和explord,在图层explord的第一祯绘制一个如图8所示的多角形,并填充上
45、适当的颜色:然后在第3祯插入一个关键祯,在属性面板上设置此多角形的Alpha透明度值为15%,最后建立第1到第3祯白MMotion运动过渡,这样就实现了飞机被击中的瞬间爆炸的效果。接下来制作飞机下落的效果。在图层planedown的第2祯插入一个关键祯,将元件Mplane拖进编辑区,使用旋转工具将飞机旋转90度,使飞机头冲下,然后在第10祯插入一个关键祯,将飞机向下移动一段直线距离,并适当降低飞机的Alpha透明度值,最后建立第2祯到第10祯的Motion运动过渡效果,这样飞机被击中后下落并消失的效果也有了。不过如果飞机在下落过程中,能有冒烟的效果就更完美了。所以我们在图层down的第4祯插入
46、一个关键祯,然后使用椭圆工具绘制个竖直的扁椭圆,并填充上黑色,在第10祯插入关键祯,调整椭园的形状并设置降低其透明度,同样建立一个Motion运动过渡效果。然后插入一个图层sound,用来设置飞机下落的声音效果,从外部导入一个爆炸的音效,然后选中图层sound,从属性面板的sound下拉列表中选择所导如的身影,最后将此层也延续到第10祯,时间线如图9所示:图9最后还要添加一些Action动作脚本对其加以控制。新建一个图层ACTION,在第1,2,和10祯分别插入一个关键祯,然后给第一祯添加如下AS:this._x=_root.expX;this._y=_root.expY;给第2套添加如下AS
47、:this._x=_root.expX;this._y=_root.expY;给第10祯添加如下As:this.removeMovieClip();6 .制作记时器:游戏是有一定时间控制的,所以还需要添加一个记时器,使用动态文本可以方便的实现,新建一个Movieclip元件,命名为mTime,在元件编辑状态下,使用文本工具绘制一个矩形文本框,然后在属性面板中设置其为Dynamic动态文本,这样就可以用Action对其中的内容加以控制了,设置其变量名为rTime,然后在文本框前面输入提示信息,如图10所示:图10然后新建一个层,在第一祯添加如下AS:now=newDate();/新建一个Date
48、对象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);到此为止,游戏中需要的元件大部
49、分准备好了,下面就可以开始布置主场景了。二:布置主场景1 .首先将默认图层layer1重命名为background,使用矩形工具绘制一个和舞台一样大小的矩形,并填充上天蓝色,将图层延续到第50祯。2 .新建两个图层分别为start和gun,在start图层上用来设置游戏的开始界面,使用文本工具输入游戏的名称,并将瞄准器放置到图层gun中,并在属性面板中设置瞄准器的Instancename为pointer,如图11所示:图113 .在图层gun的第22祯插入关键祯,输入游戏时间已到的消息,如图12所示;图124 .新建一个图层命名为score&time,用来放置记分器和记时器,将记时器m
50、Time放到舞台下面靠右的位置,然后在下面靠左的位置绘制一个动态文本框,设置其变量名为score,用来记录游戏的得分,如图13所示:图13三:给游戏添加Action动作脚本最后的游戏就是添加Action动作脚本了。新建一个图层,命名为ACTION,设置第2祯的祯标签为start,设置第9祯的祯标签为dup,设置第15祯的祯标签为gotoDup,设置第22祯的祯标签为reStart.在第一祯添加如下AS:Mouse.hide();startDrag("/pointer",true);/游戏开始前,首先隐藏鼠标,然后使瞄准器变为可拖动状态sShoot=newSound();sS
51、hoot.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;pDe
52、pth=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+10
53、0;/复制白云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");/返回到
54、祯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到这里,一款精彩的空战射击游戏就制作完成了,您可以按照相似的制作方法,制作一款比较传统的纵版射击游戏。此实例其实是设计空战类射击游戏的通用思路,其
55、它飞行射击游戏其实是在此基础上扩展成的,所以还可以进一步丰富游戏的功能,加强游戏的可玩性。Flash飞行游戏制作全解Flash一直是大家喜欢的交互多媒体开发工具,Flash游戏则以简单、耐玩,而深受用户喜爱。看似复杂多变的Flash游戏,其制作并不难。本文以一款传统的飞行游戏制作为例,说明其制作全过程,相信在你阅读完本文后,也可以通过自己的想象,制作出心仪的游戏来。一、飞行游戏制作思路分析这是一款相对传统的飞行游戏。它使用上、下、左、右键控制飞机的运行方向,Shift键发射子弹,空格键发射导弹。游戏中共有两种敌机,一号敌机的飞行方向是由下而下,二号敌机是由左至右,两种敌机的飞行轨迹都是弧线的、
56、随机的。在游戏中我们添加了几组数据,以增加游戏的刺激性。例如,装备库的设计,它可以随机添加一些装备,以供主控飞机使用。这其中包括有子弹的速度、导弹的个数、飞机数量,以及主控飞机的飞行速度。装备库的设计,会大大增加游戏的娱乐性。另外,在BOS皈机的设计中,我们使用了利用弧度换算角度的公式,使BOSSg机可以发射一种子弹,跟踪主控飞机的坐标。相信在这些设计中,会让大家品尝到不同的数学公式,在游戏制作中的妙用。注:本文全部源程序及素材下载地址为二、游戏界面设计1.制作开始界面每一个游戏都有一个开始界面,供游戏者选择,我们在第1帧中制作游戏的开始界面。启动FlashMX2004,请在第1帧中加入stop()代码,然后制作一个start按钮,当按钮点击时跳转到下一场景。如图2所示。按钮的内容如下:on(press)gotoAndPlay("Scene2",1)2 .制作星空按下Shift+F2组合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025劳动合同期内解除员工合同赔偿协议书
- 房屋不过户协议书
- 抖音代运营协议书
- 分析网际协议书
- 2025员工劳动合同协议书
- 个人卖车协议书范本
- 平台推广合作协议书
- 对赌协议书调整
- 餐饮众筹协议书
- 护士签协议书
- 2025贵州盐业(集团)遵义有限责任公司招聘15人笔试备考试题及答案解析
- 2025年全国保密教育线上培训知识考试试题库有含答案
- 《大卫 科波菲尔(节选)》《复活》《老人与海》《百年孤独》 统编版高中语文选择性必修上册
- 展厅施工方案表
- 空调维保投标方案(技术方案)
- 深圳南山风险投资基金
- 食品安全风险“日管控、周排查、月调度”记录表
- 监护仪使用及报警设置
- 通过模拟实验探究膜的透性 说课课件
- Q-SY 08365-2021 气瓶使用安全管理规范
- GB/T 29163-2012煤矸石利用技术导则
评论
0/150
提交评论