



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Flash制作空战游戏今天我们要做的是一个战斗机攻击敌机的游戏,启动游戏后,单击“start”按钮,游戏开始。用键盘的方向键控制战斗机,按空格键发射子弹摧毁敌机,每摧毁一架战斗机都会加上适当分数,如果分数大于500,就会胜利完成游戏。游戏中要控制战斗机不能被敌机发射的炮弹击中,也不能与飞来的敌机碰撞,否则每碰撞或击中一次都会减少战斗机的生命值,生命值小于0时,游戏失败,退到初始画面。下面我们分别从思路、元件制作、代码控制几个方面介绍这个小游戏的制作过程。一、所用的函数和方法这个游戏的制作思路来自于Flash中的hittest方法,hittest方法主要用于侦测“空间”的交迭,它有两种方法:mymovieclip.hittest(x,y,shapeflag);mymovieclip.hittest(target);mymovieclip.hittest(x,y,shapeflag):比较x和y坐标是否与mymovieclip实体交迭,shapeflag可以取两个值true和false,取true,则x,y坐标只要与mymovieclip实体(不含边界)的任何一点交迭,函数就返回true,否则返回false。若shapeflag值取false则x,y坐标只要与mymovieclip实体(含边界)的任何一点交迭,函数就返回true,否则返回false。mymovieclip.hittest(target):比较target代表的实体和本mymovieclip实体是否交迭,交迭函数返回true,否则返回false。游戏中将使用这种方法。二、元件的制作 1新建一个场景“场景1”,选择“修改”菜单的“文档”选项,在弹出的文档属性对话框中背景色修改为黑色,尺寸就用默认的550*400,帧频为50 fps。2建立一个影片剪辑(以下简称MC),命名为“plane”,这个影片剪辑是作为用来控制的战斗机的。在该影片剪辑中的第一帧中插入一个关键帧,在编辑区中画一个飞机图形,也可以插入一个飞机矢量图。第一帧的帧动作为“stop()”。在第二帧处插入空白关键帧,画上一个矩形,矩形要比战斗机小很多。然后在第六帧中插入空白关键帧,画一个爆炸图形,在属性面板设置第二帧到第六帧的补间动作为“形状”,第六帧的帧动作为“gotoAndPlay(1)”3新建一个MC元件“fire”,第一帧是一个空白关键帧,第二帧插入一个关键帧,画一个椭圆作为“plane”发出的用来射击的炮弹,帧动作为“stop()”。4新建一个MC元件“bullet”,把“fire”剪辑拖入编辑区中央,剪辑名称为“fire”,帧动作“stop()”。该剪辑编辑好后,在影片库中会出现其选项,用鼠标右击“bullet”选项,在弹出的快捷菜单中选择“链接”,标识符为“laser”,并勾选“为动作脚本输出”。这是关键步骤,因为要用attachmovie调用库剪辑进行复制,如果没有这一步,attachmovie就无法中库中复制出剪辑,游戏运行时“plane”也将无法发出炮弹射击。然后在bullet剪辑中给“fire”设置动作代码:onClipEvent (load) /载入时发生动作 n=_root.enemyNumber; /画面中的敌人飞机数量赋值给n speed=10 /speed初始值为0 onClipEvent (enterFrame) /进入帧时发生 Array() for(i=0;in;i+) if(_rootnew+i.ship1._currentframe=1) /画面中的敌机是不是在其首帧 if(this.hitTest(_rootnew+i) /判断该剪辑是不是与画面中复制出的敌机交迭 _root.score+=10 /如果交迭,生命值加10 _rootnew+i.ship1.gotoAndPlay(2); /敌机爆炸 removeMovieClip (_parent) ;/从场景中删除剪辑 if (_parent._x=550) /如果x坐标小于550 ,x坐标加变量speed 的值 _parent._x += speed; else /如果x坐标大于550,则删除剪辑 removeMovieClip (_parent);6新建MC命名“explode”。在第一帧中画一个方形,然后在第五帧中插入空白关键帧,在该帧中用铅笔工具画一个爆炸图形,然后回到第一帧,在属性面板中设置该帧到第五帧的补间动作为“形状”。最后在第六帧插入一个空白关键帧,该帧设置命令“stop()”。如下图所示7建立MC元件“enemyplane”。在第一帧中画一个敌人飞机,并在时间轴上设置命令“stop()”,在第二帧插入空白关键帧,将刚才的explode剪辑拖入enemyplane剪辑中原来飞机的位置,在时间轴第二帧也设置stop()。8新建MC元件“enemy”,将enemyplane元件拖入第一帧,剪辑名称为ship1,帧动作为stop()。9接下来该做敌人发出的炮弹了,新建MC元件“ball”,在编辑区画上一个椭圆,大小要合适,因为这是用做游戏中发出的炮弹的。10最后新建两个按钮元件,一个“start”,另一个是“exit”。三、代码控制 1回到主场景,把第一个图层改名为“start”,在第一帧中插入关键帧,帧动作为:function clean() for (i in _root) _rooti.removeMovieClip(); _root.clean(); stop();clean函数用来删除所有多余的影片剪辑,它的功能在第一次运行时没有作用,而在游戏运行后,“plane”的生命值为零时返回这一帧,如果没有clean函数,将出现无数个被复制的影片剪辑。2把“start”按钮和“exit”按钮拖入场景中,“start”按钮的动作脚本为on(release) /释放鼠标时进入第三帧,开始游戏 gotoAndPlay(3); “exit”按钮的动作脚本为 on (release) /释放鼠标时,退出游戏 fscommand(quit, 1); 3添加第二层,命名为“victor”,在该层第二帧中插入关键帧,在场景中用文字工具写入“you win”,设置字号为84,颜色为黄色。也插入“start”和“exit”按钮,动作脚本同上。4添加第三层,命名为“action”,在该层第三帧插入关键帧,写入代码如下:enemyNumber=5 /每次画面中出现五个敌人 for(i=0;i=500) /如果c的值(得分)大于500,则胜利结束游戏 _root.gotoAndStop(2); if(_root.life=0) /如果生命值小于0,则重新开始游戏或退出 _root.gotoAndStop(1); /当玩家按下上、下、左、右方向键时,飞机可以移动 if (Key.isDown(Key.down)and _y0) _y -= speed; sy-=speed if (Key.isDown(Key. right) and _X0) _x -= speed; if (Key.isDown(Key.space) /当按下空格键时,飞机开火,用了一个变量a,使每按一下空格发出一发炮弹,如果不设置这个变量,那么当按下空格键时,炮弹将连续飞出。 if (!a) /如果a为false shotCount+; depth=(shotCount%100)+100 _root.attachMovie(laser, sparo+shotCount, depth); /attachmovie方法是从库中直接调用复制影片剪辑“fire”,它的标识符为“laser”。 _rootsparo+shotCount._x = this._x+(_width-45) _rootsparo+shotCount._y = this._y; /复制出的“fire”剪辑的初试位置。 a = true; else a = false; 7右击“enemy”剪辑,在“动作”面板里设置代码onClipEvent (load) sy=random (400)+10; /取随机数 function reset() ship1.gotoAndStop(1); speed=random(10)+2; /敌机的飞行速度是一个随机数 _y= random(300)+_height; /敌机的初始y坐标取随机数 _x= 550+_y; _root.firePower=100 ; reset() onClipEvent (enterFrame) if(this.ship1._currentframe=1) /敌机剪辑在第一帧 _y = sy + speed * Math.cos(speed+=0.032); /敌机飞行时有浮动的效果 if(this.hitTest(_root.ship) /如果该剪辑与战斗机相撞 ship1.gotoAndStop(2); /敌机爆炸 _root.ship.play(); _root.life-=10; /生命值减10 if(random(_root.firePower)+1=10) Count+; depth=(Count%100)+200; /敌机飞行时发出炮弹 duplicateMovieClip(_root.enemyLaser, num+Count, depth); /炮弹的初始坐标就是敌机当前所在位置的坐标 _rootnum+Count._x=this._x-40 _rootnum+Count._y=this._y _x-=speed if(_x-10) reset() 8右击“ball”剪辑,在“动作”面板里设置代码 onClipEvent (load) speed=15; onClipEvent (enterFrame) if(!_root.shipDead) /如果战斗机的生命值大于0 if(this.hitTest(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit4 Amazing art Understanding ideas 教学设计-2024-2025学年高中英语外研版(2019)必修第三册
- 5 平行线的性质定理说课稿-2025-2026学年初中数学鲁教版五四制2012七年级下册-鲁教版五四制2012
- 四年级英语下册 Unit 3 Weather Part A第二课时说课稿2 人教PEP
- 关于竞选班干部的发言稿(合集15篇)
- 中医学专硕考试题及答案
- 人力资源部经理招聘与员工晋升机制协议
- 员工宿舍租赁与生活服务一体化管理合同范本
- 他项权证抵押贷款额度不足追加借款补充协议
- 混凝土搅拌车驾驶员职业健康与劳动保护合同
- 企业重组整合股份变更及合作协议
- 康复科的科室介绍
- 公安校园欺凌课件大纲
- 2025年江苏省南京市中考历史真题卷含答案解析
- 2025-2026学年浙教版小学劳动技术一年级上册教学计划及进度表
- 甲状腺疾病课件
- 数控滚齿机操作指导手册
- 如何培养数学尖子生的讲座
- 本科教学合格评估汇报
- 2025年义务教育劳动新课程(2025版)标准试题含参考答案
- 学院定密管理办法
- 挖机线路改造方案(3篇)
评论
0/150
提交评论