Flash 游戏 毕业论文(7)

2019-04-02 11:42

{

MovieClip(parent)。health。width++;

//生命值的宽

//特效元件//特效元件

度+1像素

MovieClip(parent)。boomG。gotoAndPlay(1); MovieClip(parent)。boomW。gotoAndPlay(1);

开始播放 开始播放

MovieClip(parent)。score_++; MovieClip(parent)。d=0; bu。x=-1000; bu。y=-1000;

MovieClip(parent)。buNum=0;

//分数值+1

//屏幕抖动 //玩家子弹数为0

//将子弹的碰撞区域移//如上

//删除子弹 //删除敌人坦

动到屏幕外,防止游戏中出现意外的情况

bu。parent。removeChild(bu);

this。parent。removeChild(this);

}

}

}

在函数中,我们看到,里面运用了hitTestPoint()函数,也就是说只有敌人碰撞到了玩家子弹的中心点,才会触发效果,请仔细看敌人类的图像,敌人的外围有一圈更大的透明的圆,它是真正的碰撞区域,在运行游戏时,才会更加的真实,不会出现“打空”的现象。

另外还有一句代码:

if (MovieClip(parent)。player。visible==false){parent。removeChild(this);} 它的作用是当玩家坦克被击毁时,敌人坦克同时也被删除,避免再次开始游戏时上一次游戏中的敌人还存在于舞台中。

1.2 敌人子弹类

敌人子弹类为静态图片,和敌人类一样,拥有可见部分和碰撞检测部分。如图3。5。1所示,圆形蓝色区域为可见部分,矩形半透明点阵部分为碰撞检测部分(area图层)。

27

图3。5。1 普通敌人子弹设计界面

3。5。1 敌人子弹的速度和方向

敌人子弹的速度和玩家子弹的速度的实现方法类似,具体请参照玩家子弹类。方向则是用随机数表示,即子弹在被创建时可以往上下左右四个方向随机发射,不用考虑敌人在创建敌人子弹时敌人坦克的运动方向。

3。5。2 敌人子弹的消失条件

敌人的子弹不会不停的向一个方向移动,在满足一个条件后,它就会消失,消失的条件有下列几种:

1。 子弹与墙碰撞 q8))

2。 子弹超出了游戏范围 if (x>1125||x<75||y>625||y<125)

28

if (this。hitTestObject(MovieClip(parent)。guan。q1?

3。 子弹与玩家碰撞 player。y,true))

4。if(this。hitTestPoint(MovieClip(parent)。player。x,MovieClip(parent)。5。 玩家坦克被击毁 if (MovieClip(parent)。player。visible==false) 如果上述条件中有一个满足,则运行删除子弹的代码parent。removeChild(this);

这里着重讲解一下第3个条件,子弹与玩家碰撞。这里的碰撞函数依然是取玩家坦克的中心点来进行碰撞检测,所以在敌人子弹的外面也有一个更大的透明碰撞区域。当子弹与玩家坦克碰撞时,会做两件事:第一,检测生命值元件的宽度,如果大于10像素,则生命值元件的宽度减少10像素,如果小于10,则游戏失败。第二,屏幕特效元件播放,屏幕抖动特效运行。

代码如下:

if (MovieClip(parent)。health。width>10) //如果玩家生命值大于10,则损失10生命

{ } else { }

MovieClip(parent)。boomHealth。gotoAndPlay(2); //特效播放 MovieClip(parent)。d=0; parent。removeChild(this);

//屏幕震动 //删除子弹

MovieClip(parent)。health。width=2;

//如果玩家此时生命不足10,则生命值为2,即玩家被击毁 MovieClip(parent)。health。width+=-10;

1.3 领主类

领主类为静态图片,拥有可见部分和碰撞检测部分。如图3。6。1所示,蓝色区域为可见部分,圆形半透明点阵部分为碰撞检测部分(图层2)。

29

图3。6。1 领主元件设计界面

3。6。1 领主的登场

领主登场时,整个屏幕会从一团漆黑中渐变出来,给玩家阴森恐怖的感觉,这仅仅只是一句简单的代码:boom。play(),代码写在了State类中。在登场时,屏幕右上方会出现领主的生命值,它是一个红色的数字文本框。

3。6。2领主的移动和射击

前面章节介绍了普通敌人的移动和射击,领主的移动和射击大部分与普通敌人类似,只是领主的移动不受墙的干扰,所以它可以穿墙而过,领主发射的子弹也是领主专用子弹,威力更强。

3。6。3 领主的生命值

领主跟普通敌人不一样,因为领主不会被玩家一下就打败,它有一定的生命值,玩家需要对其发射若干子弹。在游戏中,领主加入了透明度效果,透明度的范围在0~1之间,0为完全透明,就是消失了;1为完全不透明。领主在登场时透明度为1,当它受到玩家攻击时,每一次攻击,透明度减少一个特定的值,当领主透明度小于0。4时,则领主被

30

击败。这个特定值是前面在State类中提到的,State类中的des变量,des在第一关时是0。2,而后每增加一关减少0。05。所以第一关需要攻击领主4下,领主生命值具体的数学表达式为MovieClip(parent)。bossH=int(0。6/(MovieClip(parent)。des))+2;。当领主受到攻击,也会出现十分震撼的特效,特效代码为

MovieClip(parent)。d=5;

3。6。4 领主被击败了

领主怎么检测碰撞到玩家的子弹?这个函数跟普通的敌人一样,同样用到了自定义方法checkHit()。下面详细介绍此方法的具体代码和功能:

特效 动画

MovieClip(parent)。boomBoss。gotoAndPlay(2);

public function checkHit(bu:MovieClip):void {

if (bu!=null&&MovieClip(parent)。player。visible!=false) {

if (this。hitTestPoint(bu。x,bu。y,true)) //当玩家子弹{

MovieClip(parent)。buNum=0; bu。x=-100; bu。y=-100;

//子弹移动到屏幕外

//删除子弹 //领主生命值-1

//子弹数等于0

与领主碰撞时

bu。parent。removeChild(bu); MovieClip(parent)。bossH--; if (alpha<0。4) {

MovieClip(parent)。d=-50;

//当领主被击败时

//屏幕剧烈抖

动,抖

动时间为(50+6)/60

//玩家生命

//屏幕

MovieClip(parent)。health。width+=50;

值元件宽度+50像素 元件开始播放过关

//分数+10 //主界面重新

MovieClip(parent)。boomW。gotoAndPlay(8);

MovieClip(parent)。score_+=10; MovieClip(parent)。i=-300;

31


Flash 游戏 毕业论文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:20110109你的膝盖健康吗x

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: