1、坦克 史书尧武汉理工大学华夏学院课 程 设 计课程名称多媒体技术应用课程设计题 目 坦克游戏专 业 软件工程 班 级 2081 学 号 1022* 姓 名 史书尧 成 绩 _指导教师 张玉蓉 2010 年6 月14 日至2010年6月18日1. 打开使用flash编辑器制作一个坦克。利用填色工具,矩形框工具等制作坦克模型,步骤如下:1.1画出机身:1.2画出轮子的组合,并制作成一个小动画,让轮子有颤动的迹象(使用逐帧动画),最后将轮子转化为元件:1.3将轮子和坦克组合,这样我方的坦克就做好了2. 制作敌机:只将我方坦克颜色(机身,和其他部分组成部位颜色改换一下)即可,构成图如下:制作时的相关图
2、层:轮子部分:炮身部分:3. 制作子弹:3.1制作子弹飞出时的火焰(使用放射性颜色,颜色处可以使用ALPHA减淡)3.2使用放射性黑白色画3.3画出炮头:使用椭圆工具(红色)画出炮头,并离散,使之被炮身覆盖4. 制作爆炸效果:使用ALPHA和色彩渐变制作逐帧动画:这样,基本所有的元件就做好了2打开flash builder开始编辑代码相关代码如下:FOE类:package com.wepull.tank import flash.display.MovieClip; import flash.events.Event; import flash.events.KeyboardEvent; im
3、port mx.controls.Alert; import mx.controls.SWFLoader; import mx.core.Application; import mx.core.UIComponent; import mx.events.FlexEvent; public class Foe extends UIComponent /*加载外观*/ /定义外部swf文件的加载器 public var swfload:SWFLoader = new SWFLoader(); /外观 public var display:MovieClip ; /速度 public var sp:
4、Number =3; /方向 public var asp:String = ;/U:上 R:右 D:下 L:左 public function Foe() randomAsp(); /利用外部文件加载器加载文件 /添加监听 当对象构件完成后 调用 complete方法 addEventListener(FlexEvent.CREATION_COMPLETE,complete); public function complete(e:FlexEvent):void swfload.source = clips/dj.swf; swfload.addEventListener(Event.COM
5、PLETE,swfloaded); addChild(swfload); public function swfloaded(e:Event):void display = swfload.content as MovieClip; addChild(display); display.gotoAndStop(1); stage.addEventListener(Event.ENTER_FRAME,onflush); public function onflush(e:Event):void reset(); /根据坦克的方向移动 if(asp=U)/向上 display.gotoAndSto
6、p(1); this.y -= sp; else if(asp=R)/向右 display.gotoAndStop(2); this.x += sp; else if(asp=D)/向下 display.gotoAndStop(3); this.y += sp; else if(asp=L)/向左 display.gotoAndStop(4); this.x -= sp; /越界的敌军重置,重新出现 public function reset():void if(this.x1000 | this.y1000)/越界 randomAsp();/随机定方向 this.x=0; this.y=0;
7、 /敌军被打中后 public function goout():void this.x=-10000; this.y=-10000; /随机定方向 public function randomAsp():void var i:int=Math.random()*4;/随机函数随机出来的数在0和1之间 if(i=0) this.asp=U; else if(i=1) this.asp=R; else if(i=2) this.asp=D; else if(i=3) this.asp=L; Bullet类:package com.wepull.tank import flash.display.
8、MovieClip; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import mx.controls.SWFLoader; import mx.core.UIComponent; import mx.events.FlexEvent; public class Bullet extends UIComponent /外部文件加载器 public var swfload:SWFLoader = new SWFLoader(); /外观 public var displa
9、y:MovieClip; /速度 public var sp:Number =25; /方向 public var asp:String = ; /是否可用 false为不可用 public var useable:Boolean=true; /控制爆炸效果 public var timer:Timer = new Timer(50,4); public function Bullet() addEventListener(FlexEvent.CREATION_COMPLETE,complete); /定时器时间到后执行ontimer方法 timer.addEventListener(Time
10、rEvent.TIMER,ontimer); public function ontimer(e:TimerEvent):void if(timer.currentCount=1)/timer第一次 display.gotoAndStop(5); else if(timer.currentCount=timer.repeatCount) display.nextFrame(); else if(timer.currentCount1&timer.currentCounttimer.repeatCount) display.gotoAndStop(8); this.goout();/移除 /开始
11、加载swf文件 public function complete(e:FlexEvent):void swfload.source = clips/fd.swf;/指定加载文件 swfload.addEventListener(Event.COMPLETE,swfloaded); this.addChild(swfload); /swf文件加载完成后 public function swfloaded(e:Event):void display = swfload.content as MovieClip; display.gotoAndStop(1); this.addChild(displ
12、ay); stage.addEventListener(Event.ENTER_FRAME,onflush); public function onflush(e:Event):void ifgoout();/监测是否越界 /跟据方向和速度移动 if(asp=U)/向上 display.gotoAndStop(1); this.y -= sp; else if(asp=R)/向右 display.gotoAndStop(2); this.x += sp; else if(asp=D)/向下 display.gotoAndStop(3); this.y += sp; else if(asp=L)
13、/向左 display.gotoAndStop(4); this.x -= sp; public function blast():void this.asp=;/先让子弹停下 timer.reset();/重置定时器 timer.start();/启动定时器 /如果子弹越界 就让子弹重置可用状态 public function ifgoout():void if(this.x1000 | this.y1000)/越界 goout();/回收 /把子弹放到看不见的地方 public function goout():void this.useable=true;/设置为可用状态 this.x=
14、10000; this.y=10000; package com.wepull.tank import flash.display.MovieClip; import flash.events.Event; import flash.events.KeyboardEvent; import mx.controls.Alert; import mx.controls.SWFLoader; import mx.core.Application; import mx.core.UIComponent; import mx.events.FlexEvent; public class Tank ext
15、ends UIComponent /移动方法 发射子弹方法 被击中爆炸 外观 /*加载外观*/ /定义外部swf文件的加载器 public var swfload:SWFLoader = new SWFLoader(); /外观 public var dispaly:MovieClip ; /速度 public var sp:Number = 10; /方向 public var asp:String = ;/U:上 R:右 D:下 L:左 /炮口方向 public var fireasp:String=U; /弹夹 public var bularr:Array=new Array(); p
16、ublic function Tank() super(); /利用外部文件加载器加载文件 /添加监听 当对象构件完成后 调用 complete方法 addEventListener(FlexEvent.CREATION_COMPLETE,complete); /*指定加载文件路径 并且添加加载完成事件*/ public function complete(e:FlexEvent):void swfload.source = clips/wj.swf; swfload.addEventListener(Event.COMPLETE,swfloaded); addChild(swfload);
17、public function swfloaded(e:Event):void dispaly = swfload.content as MovieClip; addChild(dispaly);/加载外观 dispaly.gotoAndStop(1);/让影片剪辑 转到第1帧并停止 /-每次进入新的帧就调用刷新方法 stage.addEventListener(Event.ENTER_FRAME,onflush); /添加键盘监听 键盘按下的时候 stage.addEventListener(KeyboardEvent.KEY_DOWN,onkey); /监听键盘弹起 stage.addEv
18、entListener(KeyboardEvent.KEY_UP,onkeyend); initBul();/初始化弹夹 public function onflush(e:Event):void /根据坦克的方向移动 if(asp=U)/向上 dispaly.gotoAndStop(1); this.y -= sp; else if(asp=R)/向右 dispaly.gotoAndStop(2); this.x += sp; else if(asp=D)/向下 dispaly.gotoAndStop(3); this.y += sp; else if(asp=L)/向左 dispaly.g
19、otoAndStop(4); this.x -= sp; /*开火方法 * 产生子弹,给子弹一个方向 * 把子弹放到application中 * */ public function fire():void var bul:Bullet=getBul(); bul.useable=false;/发送出去的子弹不可用 bul.asp=this.fireasp /子弹方向与坦克炮口方向同步 bul.x=this.x; bul.y=this.y; /获得主application var app:Application=this.parentApplication as Application; ap
20、p.addChild(bul); /得到子弹 public function getBul():Bullet var b:Bullet; for(var i:int=1;i 65 * w - 87 * d - 68 * s - 83 * j - 74 * */ public function onkey(e:KeyboardEvent):void var key:int = e.keyCode; / Alert.show( String(key) ); if(key=87)/往上走 asp =U; fireasp=U;/更新炮口方向 else if(key=68)/向右 asp = R; fi
21、reasp=R;/更新炮口方向 else if(key=83)/向下 asp = D; fireasp=D;/更新炮口方向 else if(key=65)/向左 asp = L; fireasp=L;/更新炮口方向 else if(key=74)/开火 fire(); /键盘弹起方向无 public function onkeyend(e:KeyboardEvent):void asp=; /*对弹夹初始化 * 产生子弹并放到弹夹 * 同时添加到application中 * */ public function initBul():void var app:Application=this.p
22、arentApplication as Application; for(var i:int;i=50;i+) var b:Bullet=new Bullet();/产生一个子弹 b.goout();/移除到看不见的地方 bularr.push(b);/把子弹放入弹夹 app.addChild(b); 主代码: Application background-image: Embed(imgs/bg.png); background-repeat: repeat; background-position: center; background-blend: multiply; borderSki
23、n: ClassReference(com.degrafa.skins.CSSSkin); !CDATA import com.wepull.tank.Bullet; import com.wepull.tank.Foe; import com.wepull.tank.Tank; import mx.controls.Alert; import mx.core.UIComponent; import mx.events.FlexEvent; public var tank:Tank = new Tank();/产生坦克实例 public var f:Foe=new Foe(); protect
24、ed function init(event:FlexEvent):void this.addChild(tank);/将坦克实例加载到application中 tank.x=0; tank.y=200; this.addChild(f); stage.addEventListener(Event.ENTER_FRAME,onflush); public function onflush(e:Event):void var arr:Array=tank.bularr;/所有子弹 for(var i:Number=1;iarr.length;i+) var bul:Bullet=arri as
25、Bullet; if(bul!=null & bul.useable=false) if(ifhit(bul,f) bul.blast();/爆炸 / bul.goout();/回收 f.goout(); / Alert.show(相撞!); /*检测两个对像是否相撞*/ public function ifhit(o1:UIComponent,o2:UIComponent):Boolean var m_x:Number =Math.abs(o1.x-o2.x); /两个对象x轴的差值 var m_y:Number =Math.abs(o1.y-o2.y); /两个对象y轴的差值 if(m_x50 & m_y /mx:Applicati
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1