




免费预览已结束,剩余64页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FLASH 技巧 一目 录Flash游戏制作常用代码解析3FLASH游戏制作基础:响应键盘的四种方法9Flash游戏制作-空战12Flash飞行游戏制作全解19Flash游戏制作-迷宮29Flash游戏制作规划与流程漫谈36用Flash制作互动的小人45常见的飞机发射子弹的控制49一个完全使用AS2编制的飞机游戏之制作详解5069Flash游戏制作常用代码解析1.获取随机数 随机函数在flash游戏制作中很常用,例如在拼图游戏中,每次开始新的游戏时可以利用随机函数使图块获得新的位置,试想一个千篇一律的游戏谁会有兴趣玩下去。现在我们有两种产生随机数的方式:random()和Math.random(),举例来讲,如果我们相随机赋给x一个0-5的数,我们可以使用x=random(6)或者x=Math.random()*5。但这两种方式产生的随机数是有区别的,用random(6)方法返回的x是0=x=5的整数,而另外一种返回的x则是0=x190Clear12Page Up33Insert45/?191Enter13Page Down34Delete46192Shift16End35Num Lock144219Control17Home36;:186|220Alt18Left Arrow37=+187221Cape Lock20Up Arrow38,=0 & y=0) r = Math.round(tan); else if (x=0 & y0) r = Math.round(360+tan); else r = Math.round(180+tan);/判断各种不同的情况,通过运算使r值在0-360之间 pointer._rotation = r;/将r值付给_rotation 放置一个用来显示r值的文本框属性为Dynamic Text,获取变量(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=x0max返回两个数中最大者Math.max(x,y)min返回两个数中最小者Math.min(x,y)pow计算x的y次幂Math.pow(x)random返回n,其中 0 = n =0tan计算并返回指定角度的正切值Math.tan(x)换算公式参见cos以上我们向大家介绍了Flash游戏制作中最常用的一些ActionScript,掌握了这些基本控制方法,就可以制作出很多有意思的Flash游戏,同时在制作的过程中你还会发现更多的技巧,欢迎投稿和大家一起交流。FLASH游戏制作基础:响应键盘的四种方法 响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛的使用,尤其是在 FLASH游戏制作中,如果缺少了响应键盘的方法,那是不可能的,而响应键盘的方法主要的四种,分别是:1、利用按钮进行检测2、利用KEY对象3、利用键盘侦听的方法4、利用影片剪辑的keyUp和keyDown事件来实现响应键盘只有熟练掌握了这些方法,然后加以变通的话,就会得到很多意想不到的效果,下面我就结合理论和自己的想法简要的介绍一下。第一种响应键盘的方法:利用按钮进行检测来实现响应键盘在按钮的on事件处理函数中不但可以对鼠标事件作出响应,而且可以对键盘事件作出响应。 如在按钮的动作面板中加入如下所示的代码,在敲击键盘上的X键时输出窗口中将提示:X is pressed在按钮上加上:on (keyPress x) trace(X is pressed);但是要注意的是:检测键盘上的字母键时,字母都应为小写。如果要检测键盘中的特殊键, Flash中有一些专门的代码来表示它们,下面列出了一些常用的功能键的表示代码:如要检测键盘上的键,可以使用下面的ActionScript:on (keyPress ) trace(Left is pressed);另外,你可以在一个按钮中加入若干个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(The left arrow is down);函数Key.isDown返回一个布尔值,当该数中的参数对应的键被按下时返回true,否则返回false。常量Key.LEFT代表键盘上的左方向键。当左方向键被按下时,该函数返回true。Key对象中的常量代表了键盘上相应的键,下面列出了一些基本的常量:一些功能键的表示:Key.BACKSPACE Key.ENTER Key.PGDN Key.CAPSLOCK Key.ESCAPE Key.RIGHT Key.CONTROL Key.HOME Key.SHIFT Key.DELETEKEY Key.INSERT Key.SPACE Key.DOWN Key.LEFT Key.TAB Key.END Key.PGUP Key.UP 以上是键盘上的功能键,那么如何表示键盘上的字母键呢?Key对象提供了一个函数Key.getCode来实现这一功能,如下所示:if (Key.isDown(Key.getCode(x) trace(X is pressed);上面脚本的意思就是,利用Key.getCode函数来告诉系统你是否按下了x键,如果按下了x键以后,函数Key.isDown则会返回true,在输出窗口就会输出X is pressed。第三种响应键盘的方法:利用键盘侦听的方法来实现响应键盘(个人习惯用这种方法)假设在影片剪辑的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动作脚本对飞机进行控制,所以需要将最终的组合体制作成Movie clip元件,所以再新建一个Movie clip元件,进入元件的编辑状态后,将元件gMan和Gplane分别拖到编辑区,使用鼠标调整其相对位置,如图4所示:图4这样,一架逼真的战斗机就制作完成了。2飞机飞行动画的制作:游戏中飞机是从游戏窗口左边随机出现的,但是飞机的飞行路线是事先确定好的,我们可以在制作过程中按照实际需要制作一些飞机沿一定路线飞行的Motion动画,使用Guide Line引导线可以很方便的实现,然后在游戏中分别调用即可,本游戏预先制作了三中不同的飞行路线,这里以其中一种举例说明,其它的制作方法完全类似。新建一个Movie clip元件,命名为mPlane1,进入元件的编辑状态后,在图层layer1的上面插入一个引导层,在引导层上使用铅笔工具随意绘制一条曲线,然后将图层延续到第120桢,如图5所示:图5然后将元件mPlane拖到图层layer1的第1关键桢,放置到曲线的左边的开始端点,飞机会自动吸附到此端点,接着在属性面板中设置飞机的Instance name为airplane。在第120桢插入一个关键祯,同样的将飞机拖到曲线的右边的端点,也会自动吸附上去,最后,在第1祯到第120祯的任意祯上单击鼠标右键,选取Creat Motion Tween命令即可,这样就创建了飞机从曲线的左端点沿曲线运动到右端点的运动效果。最后还需要添加一个图层Action,用来设置Action动作脚本,在第1桢添加如下as:var planeDepth=_root.pDepth;在最后一桢(120祯)添加如下as:_root.numPlane-;this.removeMovieClip();按照同样的方法分别制作元件mPlane2和mPlane3,和mPlane1的唯一不同点就是引导层的曲线不一样。3制作瞄准镜:游戏中玩家可以控制的唯一对象就是瞄准镜,可以用它瞄准并射击敌机,新建一个Movie clip元件,命名为mPointer,在编辑区中使用椭圆工具绘制一个正圆,然后在正圆中绘制四条方向不同的直线即可,如图6所示:图64云彩的制作:既然是空战,天空中当然少不了白云,并且适当的在游戏中加入白云这样的对象,可以使游戏更生动和逼真,游戏中的白云是使用Action动作脚本随机复制并进行控制的,所以这里我们新建一个Movie clip元件,命名为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.飞机被击落的效果:游戏中飞机如果被击落,如果简单的来做,只需要设置飞机消失即可,不过为了增强游戏的观赏性,我们这里专门来设计以下飞机被击落的效果,而且会带有爆炸的声音。新建一个Movie clip元件,命名为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.制作记时器:游戏是有一定时间控制的,所以还需要添加一个记时器,使用动态文本可以方便的实现,新建一个Movie clip元件,命名为mTime,在元件编辑状态下,使用文本工具绘制一个矩形文本框,然后在属性面板中设置其为Dynamic动态文本,这样就可以用Action对其中的内容加以控制了,设置其变量名为rTime,然后在文本框前面输入提示信息,如图10所示:图10然后新建一个层,在第一祯添加如下AS:now = new Date();/新建一个Date对象startTime = now.getTime();/设置开始时间为系统时间playTime = _root.playTime;rTime = playTime;在第三祯添加如下AS:now = new Date();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 中,并在属性面板中设置瞄准器的Instance name为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 = new Sound();sShoot.attachSound(sShoot);/新建一个sound声音对象,然后从外部导入射击的音效Sshoot,使用attachsound方/法将此声音绑定sExp = new Sound();sExp.attachSound(sExp);/新建一个sound声音对象,然后从外部导入射击的音效Sexp,使用attachsound方/法将此声音绑定stop();在第2祯添加如下AS:score = 0;/设置初始得分为0playTime = 100;/设置游戏时间为100秒var expX;var expY;/定义两变量,代表飞机的坐标cDepth = 100;pDepth = 0;numPlane = 0;numCloud = 0;/定义变量,分别代表飞机和云的深度和数量_root.attachMovie(mP, pointer, 300);startDrag(/pointer, true);在第9祯添加如下AS:if (Math.random()0.2 & numCloud5) numCloud+;_root.attachMovie(mCloud, c+cDepth, cDepth);cDepth = (+cDepth)%100+100;/复制白云if (Math.random()0.3 & numPlane7) _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; i100; i+) removeMovieClip (/c+(100+i);removeMovieClip (/p+i);stop ();/删除游戏中所有复制出来的飞机和白云最后的时间线如图14所示:图14到这里,一款精彩的空战射击游戏就制作完成了,您可以按照相似的制作方法,制作一款比较传统的纵版射击游戏。此实例其实是设计空战类射击游戏的通用思路,其它飞行射击游戏其实是在此基础上扩展成的,所以还可以进一步丰富游戏的功能,加强游戏的可玩性。 Flash飞行游戏制作全解Flash一直是大家喜欢的交互多媒体开发工具,Flash游戏则以简单、耐玩,而深受用户喜爱。看似复杂多变的Flash游戏,其制作并不难。本文以一款传统的飞行游戏制作为例,说明其制作全过程,相信在你阅读完本文后,也可以通过自己的想象,制作出心仪的游戏来。 一、飞行游戏制作思路分析这是一款相对传统的飞行游戏。它使用上、下、左、右键控制飞机的运行方向,Shift键发射子弹,空格键发射导弹。游戏中共有两种敌机,一号敌机的飞行方向是由下而下,二号敌机是由左至右,两种敌机的飞行轨迹都是弧线的、随机的。在游戏中我们添加了几组数据,以增加游戏的刺激性。例如,装备库的设计,它可以随机添加一些装备,以供主控飞机使用。这其中包括有子弹的速度、导弹的个数、飞机数量,以及主控飞机的飞行速度。装备库的设计,会大大增加游戏的娱乐性。另外,在BOSS敌机的设计中,我们使用了利用弧度换算角度的公式,使BOSS敌机可以发射一种子弹,跟踪主控飞机的坐标。相信在这些设计中,会让大家品尝到不同的数学公式,在游戏制作中的妙用。注:本文全部源程序及素材下载地址为/hdb/fj_game.rar。二、游戏界面设计1.制作开始界面每一个游戏都有一个开始界面,供游戏者选择,我们在第1帧中制作游戏的开始界面。启动Flash MX 2004,请在第1帧中加入stop()代码,然后制作一个start按钮,当按钮点击时跳转到下一场景。如图2所示。按钮的内容如下:on(press)gotoAndPlay(Scene 2,1)2.制作星空按下Shift+F2组合键,打开“场景”面板,点击“+”按钮新增加一个场景,进入场景2,开始游戏的制作。将“图层1”更名为scene以制作星空。其实,这些星空都是用圆形绘图工具绘制上去的,它们的大小只有一个或是两个像素,我们可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年微生物学与免疫学考试试题及答案
- Tesmilifene-fumarate-Standard-DPPE-fumarate-Standard-生命科学试剂-MCE
- mCherry-mRNA-N1-Me-Pseudo-UTP-生命科学试剂-MCE
- Halymecin-C-生命科学试剂-MCE
- 2025年青少年心理健康教育师考试试题及答案
- 2025年人工智能应用专业毕业生能力测试试题及答案
- 2025年社会心理学应用与研究方法考试试题及答案
- 2025年经济法学专业考试相关试题及答案
- 2025年建筑设计专业研究生入学考试试卷及答案
- 2025年电子技术基础考试试题及答案
- 病例对照研究设计和实施步骤
- T∕CWAN 0033-2021 铝合金搅拌摩擦焊体积型缺陷相控阵超声检测规范
- 报废机动车拆解有限公司应急预案
- FMEA第五版(实例2)
- 基于微信小程序的连连看小游戏的设计与实现
- 国际汽车贸易检验、检疫、索赔、仲裁与不可抗力
- (完整版)详细化学物质及其CAS注册号清单
- 智障儿童的家庭教育(课堂PPT)
- 《电路分析基础》试题及答案
- 生物多样性影响评价规范
- 日本文学概论1
评论
0/150
提交评论