做flash小游戏.docx
- 文档编号:4940223
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:8
- 大小:107KB
做flash小游戏.docx
《做flash小游戏.docx》由会员分享,可在线阅读,更多相关《做flash小游戏.docx(8页珍藏版)》请在冰豆网上搜索。
做flash小游戏
一、所用的函数和方法这个游戏的制作思路来自于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。
游戏中将使用这种方法。
在游戏中还有几个比较重要的语句:
duplicatemovieclip方法和Removemovieclip方法以及Attachmovie方法。
Duplicatemovieclip方法是在主场景中(或在其他影片剪辑中)制作一个影片剪辑实体的复制件,这个复制件将会以某个深度值(深度值高的对象覆盖深度值低的对象)放置在其源实体上。
Removemovieclip方法是删除影片剪辑实体的复制件,不能删除在剪辑时手工放置在舞台上的实体。
Attachmovie方法几乎和duplicatemovieclip方法完全相同,但是它不需要在舞台上事先放置一个实体共选择,而可以直接从库中取出一个影片剪辑实体。
本例中战斗机发出的子弹是通过这种方法实现的,而敌机发出的子弹是事先在舞台上放一个剪辑,也就是用duplicatemovieclip来复制的。
二、元件的制作
1.新建一个场景“场景1”,选择“修改”菜单的“文档”选项,在弹出的文档属性对话框中背景色修改为黑色,尺寸就用默认的550*400,帧频为50fps。
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){//进入帧时发生
for(i=0;i if(_root["new"+i].ship1._currentframe==1){//画面中的敌机是不是在其首帧 if(this.hitTest(_root["new"+i])){//判断该剪辑是不是与画面中复制出的敌机交迭 _root.score+=10 //如果交迭,生命值加10 _root["new"+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”,在第一帧中插入关键帧,帧动作为: clean函数用来删除所有多余的影片剪辑,它的功能在第一次运行时没有作用,而在游戏运行后,“plane”的生命值为零时返回这一帧,如果没有clean函数,将出现无数个被复制的影片剪辑。 2.把“start”按钮和“exit”按钮拖入场景中,“start”按钮的动作脚本为 on(release){//释放鼠标时进入第三帧,开始游戏 gotoAndPlay(3); } “exit”按钮的动作脚本为 on(release){//释放鼠标时,退出游戏 fscommand("quit","1"); } 3.添加第二层,命名为“victor”,在该层第二帧中插入关键帧,在场景中用文字工具写入“youwin”,设置字号为84,颜色为黄色。 也插入“start”和“exit”按钮,动作脚本同上。 4.添加第三层,命名为“action”,在该层第三帧插入关键帧,写入代码如下: enemyNumber=5//每次画面中出现五个敌人 for(i=0;i duplicateMovieClip("enemy","new"+i,30+i) } life=100//生命值为100 score=0;//开始得分为0 stop(); 5.在该帧场景中添加两个静态文本框和两个动态文本框,用来表示生命值和得分。 静态文本框内的内容分别是“生命”和“得分”,第一个动态文本框命变量值为life,第二个动态文本框的变量值为score。 6.再增加两个图层,一个命名为“plane”,一个命名为“enemy”,并分别在第三帧插入关键帧。 选中“plane”层的第三帧,把“plane”拖入,剪辑名称为“ship”。 选中“enemy”层的第三帧,把“enemy”和“ball”剪辑拖入,剪辑名称分别为“enemy”和“enemylaser”。 右击“plane”剪辑,在动作面板里写入代码 onClipEvent(load){ //载入时进行初始化 speed=6; sy=_y; ang=0; } onClipEvent(enterFrame){ _y=sy+4*Math.cos(ang+=0.092);//用cos函可以是飞机有在空中飘动的效果 c=_root.score; //给c变量赋值,初试状态为“0” if(c>=500){//如果c的值(得分)大于500,则胜利结束游戏 _root.gotoAndStop (2); } if(_root.life<=0){//如果生命值小于0,则重新开始游戏或退出 _root.gotoAndStop (1); } //当玩家按下上、下、左、右方向键时,飞机可以移动 if(Key.isDown(Key.down)and_y<400){_y+=speed;sy+=speed} if(Key.isDown(Key.up)and_y>0){_y-=speed;sy-=speed} if(Key.isDown(Key.right)and_X<550){_x+=speed;} if(Key.isDown(Key.left)and_X>0){_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”。 _root["sparo"+shotCount]._x=this._x+(_width-45) _root["sparo"+shotCount]._y=this._y; //复制出的“fire”剪辑的初试位置。 a=true; } }else{a=false;} } 7.右击“enemy”剪辑,在“动作”面板里设置代码 onClipEvent(load){ sy=random(400)+10;//取随机数 functionreset(){ 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); //炮弹的初始坐标就是敌机当前所在位置的坐标 _root["num"+Count]._x=this._x-40 _root["num"+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(_root.ship)){//敌机发出的炮弹击中战斗机 _root.ship.play(); _root.life-=5;//生命值减5 removeMovieClip(this) } _x-=speed; if(_x<-10) {removeMovieClip(this)} } } 四、总结 至此,整个游戏就全部完成了。 在以上过程中,为了讲解尽可能的简洁,我没有讲述插入音效的过程,实际上插入的方法也是很简单的,只要把合适的声音放到合适的帧中就可以了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- flash 小游戏