Flash 游戏 毕业论文(6)

2019-04-02 11:42

编写进入帧事件函数。

private function onEnterFrame_(e:Event):void

//当子弹碰到墙后删除子弹

{

x+=vx; y+=vy;

MovieClip(parent)。bulletCS=this; //将自身赋值到State类的

bulletCS参数中方便其他类调用

if (this。hitTestObject(MovieClip(parent)。guan。q1)) { }

else if (this。hitTestObject(MovieClip(parent)。guan。q2)) { }

else if (this。hitTestObject(MovieClip(parent)。guan。q3)) { }

else if (this。hitTestObject(MovieClip(parent)。guan。q4)) { }

else if (this。hitTestObject(MovieClip(parent)。guan。q5)) { }

else if (this。hitTestObject(MovieClip(parent)。guan。q6)) {

22

MovieClip(parent)。buNum=0; parent。removeChild(this);

MovieClip(parent)。buNum=0; parent。removeChild(this);

MovieClip(parent)。buNum=0; parent。removeChild(this);

MovieClip(parent)。buNum=0; parent。removeChild(this);

MovieClip(parent)。buNum=0; parent。removeChild(this);

}

MovieClip(parent)。buNum=0; parent。removeChild(this);

else if (this。hitTestObject(MovieClip(parent)。guan。q7)) { }

else if (this。hitTestObject(MovieClip(parent)。guan。q8)) { }

else if (x>1150||x<50||y>650||y<100) { }

MovieClip(parent)。buNum=0; parent。removeChild(this); MovieClip(parent)。buNum=0; parent。removeChild(this); MovieClip(parent)。buNum=0; parent。removeChild(this);

//当子弹超出游戏区域后删除子弹

}

1.1 敌人类

敌人类是静态图片有两部分组成,第一部分为游戏者可见部分,如图3。4。1中的蓝色圆形区域;第二部分为碰撞检测部分,在area图层中,用于测试与子弹的碰撞,如图3。4。1中的半透明点阵圆形。

23

图3。4。1 敌人元件设计界面

3。4。1简单人工智能

敌人类和玩家类的功能相似,唯一的区别是,玩家坦克的移动和发射子弹是由玩家通过键盘来控制,而敌人类的移动和发射子弹是由电脑来控制,在敌人类中,一个数学方法起到了很重要的作用,那就是Math。randim()方法,它是Flash中的一个静态方法,功能是生成一个介于0~1之间的随机数。下面重点介绍一下Math。randim()方法如何让敌人进行自主移动和射击。

3。4。2 敌人的移动

敌人在被State元件添加到舞台中时,它的横坐标和纵坐标在一个矩形区域内随机生成。敌人的移动也有两个变量:vx和vy,实现敌人的移动,类中还增加了两个新变量:private var isMove:Boolean; private var moveTime:Number; 即布尔型变量isMove和数量型变量moveTime,isMove变量用来表示敌人当前是否移动,moveTime变量则表示敌人移动的时间或者静止的时间,他们的每一次改变都是 一个介于0~100之间的随机

24

数,敌人的运动方式为移动——静止——移动,的实现原理前面的屏幕抖动特效相同。

具体敌人的移动方法实现如下:

添加加载到舞台时间监听器。 public function Enemy():void

初始化敌人数据并添加进入帧和删除类的时间监听器 public function onATS_(e:Event):void

数据初始化后根据参数来改变横向和纵向速度,就像玩家按键盘那样操作敌人移动,这部分与玩家类类似,具体请参照玩家类。

25

{ }

addEventListener(Event。ADDED_TO_STAGE,onATS_);

{ }

bulletNum=30; isMove=true; isShoot=false;

moveTime=int(Math。random()*100); shootTime=int(Math。random()*100); fangXiang=int(Math。random()*5+1); x=Math。random()*1200; y=Math。random()*900; vx=0; vy=0;

addEventListener(Event。REMOVED_FROM_STAGE,onRFS_); addEventListener(Event。ENTER_FRAME,onEnterFrame_);

3。4。3 敌人发射子弹

敌人发射的子弹与玩家发射子弹不同,它没有数量限制,敌人类通过两个变量:isShoot:Boolean;ShootTime:Number; 即布尔型变量isShoot和数量型变量shootTime,isShoot表示敌人是否处于射击状态,shootTime表示敌人设计状态或者非设计状态的持续时间,他们也都是0~100的随机数,射击方式为射击——静止——射击,当处于射击状态时,有一个子弹射击频率参数(bulletNum),用它来调整子弹的射击频率,数值越大则频率越慢。射击时,敌人类会将自身的横纵坐标赋值到State元件中的enemyX和enemyY变量中,并加载一个敌人的子弹类。

具体实现方法如下:

if (j>moveTime) //敌人移动--停止--再移动的运动规律

3。4。4敌人与玩家子弹的碰撞

前面我们已经知道了玩家子弹被“上传”到了State类中,所以要找到玩家发射的子弹只需从State元件上“下载”就行了,方法为checkHit(MovieClip(parent)。bulletCS); 这是自己定义的一个方法,用于检测敌人与玩家子弹的碰撞。具体的碰撞方法如下:

{ }

if (k>shootTime) //敌人射击--停止--再射击的射击规律

isMove=! isMove; j=0;

moveTime=int(Math。random()*100); fangXiang=int(Math。random()*5);

{ } j++; k++;

isShoot=! isShoot; k=0;

shootTime=int(Math。random()*100);

public function checkHit(bu:MovieClip):void {

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

if (this。hitTestPoint(bu。x,bu。y,true))

26

玩家子弹和敌人都存在与舞台


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

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

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

马上注册会员

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