坦克 史书尧.docx

上传人:b****3 文档编号:26778991 上传时间:2023-06-22 格式:DOCX 页数:21 大小:102.22KB
下载 相关 举报
坦克 史书尧.docx_第1页
第1页 / 共21页
坦克 史书尧.docx_第2页
第2页 / 共21页
坦克 史书尧.docx_第3页
第3页 / 共21页
坦克 史书尧.docx_第4页
第4页 / 共21页
坦克 史书尧.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

坦克 史书尧.docx

《坦克 史书尧.docx》由会员分享,可在线阅读,更多相关《坦克 史书尧.docx(21页珍藏版)》请在冰豆网上搜索。

坦克 史书尧.docx

坦克史书尧

武汉理工大学华夏学院

课程设计

课程名称《多媒体技术应用》课程设计

题目坦克游戏

专业软件工程

班级2081

学号1022*******

姓名史书尧

成绩__________________

指导教师张玉蓉

2010年6月14日至2010年6月18日

1.打开使用flash编辑器制作一个坦克。

利用填色工具,矩形框工具等制作坦克模型,步骤如下:

1.1画出机身:

1.2画出轮子的组合,并制作成一个小动画,让轮子有颤动的迹象(使用逐帧动画),最后将轮子转化为元件:

1.3将轮子和坦克组合,这样我方的坦克就做好了

2.制作敌机:

只将我方坦克颜色(机身,和其他部分组成部位颜色改换一下)即可,构成图如下:

制作时的相关图层:

轮子部分:

炮身部分:

 

3.制作子弹:

3.1制作子弹飞出时的火焰(使用放射性颜色,颜色处可以使用ALPHA减淡)

3.2使用放射性黑白色画

3.3画出炮头:

使用椭圆工具(红色)画出炮头,并离散,使之被炮身覆盖

4.制作爆炸效果:

使用ALPHA和色彩渐变制作逐帧动画:

这样,基本所有的元件就做好了

2打开flashbuilder开始编辑代码

相关代码如下:

FOE类:

packagecom.wepull.tank

{

importflash.display.MovieClip;

importflash.events.Event;

importflash.events.KeyboardEvent;

importmx.controls.Alert;

importmx.controls.SWFLoader;

importmx.core.Application;

importmx.core.UIComponent;

importmx.events.FlexEvent;

publicclassFoeextendsUIComponent

{

/*加载外观*/

//定义外部swf文件的加载器

publicvarswfload:

SWFLoader=newSWFLoader();

//外观

publicvardisplay:

MovieClip;

//速度

publicvarsp:

Number=3;

//方向

publicvarasp:

String="";//U:

上R:

右D:

下L:

publicfunctionFoe()

{

randomAsp();

//利用外部文件加载器加载文件

//添加监听当对象构件完成后调用complete方法

addEventListener(FlexEvent.CREATION_COMPLETE,complete);

}

publicfunctioncomplete(e:

FlexEvent):

void{

swfload.source="clips/dj.swf";

swfload.addEventListener(Event.COMPLETE,swfloaded);

addChild(swfload);

}

publicfunctionswfloaded(e:

Event):

void{

display=swfload.contentasMovieClip;

addChild(display);

display.gotoAndStop

(1);

stage.addEventListener(Event.ENTER_FRAME,onflush);

}

publicfunctiononflush(e:

Event):

void{

reset();

//根据坦克的方向移动

if(asp=="U"){//向上

display.gotoAndStop

(1);

this.y-=sp;

}elseif(asp=="R"){//向右

display.gotoAndStop

(2);

this.x+=sp;

}elseif(asp=="D"){//向下

display.gotoAndStop(3);

this.y+=sp;

}elseif(asp=="L"){//向左

display.gotoAndStop(4);

this.x-=sp;

}

}

//越界的敌军重置,重新出现

publicfunctionreset():

void{

if(this.x<0||this.x>1000||this.y<0||this.y>1000){//越界

randomAsp();//随机定方向

this.x=0;

this.y=0;

}

}

//敌军被打中后

publicfunctiongoout():

void{

this.x=-10000;

this.y=-10000;

}

//随机定方向

publicfunctionrandomAsp():

void{

vari:

int=Math.random()*4;//随机函数随机出来的数在0和1之间

if(i==0){

this.asp="U";

}elseif(i==1){

this.asp="R";

}elseif(i==2){

this.asp="D";

}elseif(i==3){

this.asp="L";

}

}

}

}

Bullet类:

packagecom.wepull.tank

{

importflash.display.MovieClip;

importflash.events.Event;

importflash.events.TimerEvent;

importflash.utils.Timer;

importmx.controls.SWFLoader;

importmx.core.UIComponent;

importmx.events.FlexEvent;

publicclassBulletextendsUIComponent

{

//外部文件加载器

publicvarswfload:

SWFLoader=newSWFLoader();

//外观

publicvardisplay:

MovieClip;

//速度

publicvarsp:

Number=25;

//方向

publicvarasp:

String="";

//是否可用false为不可用

publicvaruseable:

Boolean=true;

//控制爆炸效果

publicvartimer:

Timer=newTimer(50,4);

publicfunctionBullet()

{

addEventListener(FlexEvent.CREATION_COMPLETE,complete);

//定时器时间到后执行ontimer方法

timer.addEventListener(TimerEvent.TIMER,ontimer);

}

publicfunctionontimer(e:

TimerEvent):

void{

if(timer.currentCount==1){//timer第一次

display.gotoAndStop(5);

}elseif(timer.currentCount==timer.repeatCount){

display.nextFrame();

}elseif(timer.currentCount>1&&timer.currentCount

display.gotoAndStop(8);

this.goout();//移除

}

}

//开始加载swf文件

publicfunctioncomplete(e:

FlexEvent):

void{

swfload.source="clips/fd.swf";//指定加载文件

swfload.addEventListener(Event.COMPLETE,swfloaded);

this.addChild(swfload);

}

//swf文件加载完成后

publicfunctionswfloaded(e:

Event):

void{

display=swfload.contentasMovieClip;

display.gotoAndStop

(1);

this.addChild(display);

stage.addEventListener(Event.ENTER_FRAME,onflush);

}

publicfunctiononflush(e:

Event):

void{

ifgoout();//监测是否越界

//跟据方向和速度移动

if(asp=="U"){//向上

display.gotoAndStop

(1);

this.y-=sp;

}elseif(asp=="R"){//向右

display.gotoAndStop

(2);

this.x+=sp;

}elseif(asp=="D"){//向下

display.gotoAndStop(3);

this.y+=sp;

}elseif(asp=="L"){//向左

display.gotoAndStop(4);

this.x-=sp;

}

}

publicfunctionblast():

void{

this.asp="";//先让子弹停下

timer.reset();//重置定时器

timer.start();//启动定时器

}

//如果子弹越界就让子弹重置可用状态

publicfunctionifgoout():

void{

if(this.x<0||this.x>1000||this.y<0||this.y>1000){//越界

goout();//回收

}

}

//把子弹放到看不见的地方

publicfunctiongoout():

void{

this.useable=true;//设置为可用状态

this.x=10000;

this.y=10000;

}

}

}

packagecom.wepull.tank

{

importflash.display.MovieClip;

importflash.events.Event;

importflash.events.KeyboardEvent;

importmx.controls.Alert;

importmx.controls.SWFLoader;

importmx.core.Application;

importmx.core.UIComponent;

importmx.events.FlexEvent;

publicclassTankextendsUIComponent

{

//移动方法发射子弹方法被击中爆炸外观

/*加载外观*/

//定义外部swf文件的加载器

publicvarswfload:

SWFLoader=newSWFLoader();

//外观

publicvardispaly:

MovieClip;

//速度

publicvarsp:

Number=10;

//方向

publicvarasp:

String="";//U:

上R:

右D:

下L:

//炮口方向

publicvarfireasp:

String="U";

//弹夹

publicvarbularr:

Array=newArray();

publicfunctionTank()

{

super();

//利用外部文件加载器加载文件

//添加监听当对象构件完成后调用complete方法

addEventListener(FlexEvent.CREATION_COMPLETE,complete);

}

/*指定加载文件路径并且添加加载完成事件*/

publicfunctioncomplete(e:

FlexEvent):

void{

swfload.source="clips/wj.swf";

swfload.addEventListener(Event.COMPLETE,swfloaded);

addChild(swfload);

}

publicfunctionswfloaded(e:

Event):

void{

dispaly=swfload.contentasMovieClip;

addChild(dispaly);//加载外观

dispaly.gotoAndStop

(1);//让影片剪辑转到第1帧并停止

//--每次进入新的帧就调用刷新方法

stage.addEventListener(Event.ENTER_FRAME,onflush);

//添加键盘监听键盘按下的时候

stage.addEventListener(KeyboardEvent.KEY_DOWN,onkey);

//监听键盘弹起

stage.addEventListener(KeyboardEvent.KEY_UP,onkeyend);

initBul();//初始化弹夹

}

publicfunctiononflush(e:

Event):

void{

//根据坦克的方向移动

if(asp=="U"){//向上

dispaly.gotoAndStop

(1);

this.y-=sp;

}elseif(asp=="R"){//向右

dispaly.gotoAndStop

(2);

this.x+=sp;

}elseif(asp=="D"){//向下

dispaly.gotoAndStop(3);

this.y+=sp;

}elseif(asp=="L"){//向左

dispaly.gotoAndStop(4);

this.x-=sp;

}

}

/**开火方法

*产生子弹,给子弹一个方向

*把子弹放到application中

**/

publicfunctionfire():

void{

varbul:

Bullet=getBul();

bul.useable=false;//发送出去的子弹不可用

bul.asp=this.fireasp//子弹方向与坦克炮口方向同步

bul.x=this.x;

bul.y=this.y;

//获得主application

varapp:

Application=this.parentApplicationasApplication;

app.addChild(bul);

}

//得到子弹

publicfunctiongetBul():

Bullet{

varb:

Bullet;

for(vari:

int=1;i<=50;i++){

vartemp:

Bullet=bularr[i]asBullet;//根据i得到子弹

if(temp.useable==true){//是否可用

b=temp;

returnb;

}

}

returnb;

}

/**

*a-->65

*w-->87

*d-->68

*s-->83

*j-->74

**/

publicfunctiononkey(e:

KeyboardEvent):

void{

varkey:

int=e.keyCode;

//Alert.show(String(key));

if(key==87){//往上走

asp="U";

fireasp="U";//更新炮口方向

}elseif(key==68){//向右

asp="R";

fireasp="R";//更新炮口方向

}elseif(key==83){//向下

asp="D";

fireasp="D";//更新炮口方向

}elseif(key==65){//向左

asp="L";

fireasp="L";//更新炮口方向

}elseif(key==74){//开火

fire();

}

}

//键盘弹起方向无

publicfunctiononkeyend(e:

KeyboardEvent):

void{

asp="";

}

/**对弹夹初始化

*产生子弹并放到弹夹

*同时添加到application中

**/

publicfunctioninitBul():

void{

varapp:

Application=this.parentApplicationasApplication;

for(vari:

int;i<=50;i++){

varb:

Bullet=newBullet();//产生一个子弹

b.goout();//移除到看不见的地方

bularr.push(b);//把子弹放入弹夹

app.addChild(b);

}

}

}

}

主代码:

xmlversion="1.0"encoding="utf-8"?

>

ApplicationapplicationComplete="init(event)"xmlns:

mx="layout="absolute"minWidth="955"minHeight="600">

Style>

Application{

background-image:

Embed("imgs/bg.png");

background-repeat:

repeat;

background-position:

center;

background-blend:

multiply;

borderSkin:

ClassReference("com.degrafa.skins.CSSSkin");

}

Style>

Script>

[CDATA[

importcom.wepull.tank.Bullet;

importcom.wepull.tank.Foe;

importcom.wepull.tank.Tank;

importmx.controls.Alert;

importmx.core.UIComponent;

importmx.events.FlexEvent;

publicvartank:

Tank=newTank();//产生坦克实例

publicvarf:

Foe=newFoe();

protectedfunctioninit(event:

FlexEvent):

void

{

this.addChild(tank);//将坦克实例加载到application中

tank.x=0;

tank.y=200;

this.addChild(f);

stage.addEventListener(Event.ENTER_FRAME,onflush);

}

publicfunctiononflush(e:

Event):

void{

vararr:

Array=tank.bularr;//所有子弹

for(vari:

Number=1;i

varbul:

Bullet=arr[i]asBullet;

if(bul!

=null&&bul.useable==false){

if(ifhit(bul,f)){

bul.blast();//爆炸

//bul.goout();//回收

f.goout();

//Alert.show("相撞!

");

}

}

}

}

/*检测两个对像是否相撞*/

publicfunctionifhit(o1:

UIComponent,o2:

UIComponent):

Boolean{

varm_x:

Number=Math.abs(o1.x-o2.x);//两个对象x轴的差值

varm_y:

Number=Math.abs(o1.y-o2.y);//两个对象y轴的差值

if(m_x<50&&m_y<50){//相撞

returntrue;

}

returnfalse;

}

]]>

Script>

Applicati

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1