}
vx=6; vy=0; fangxiang=2;
编写键盘按键弹起事件的方法:
private function onKeyUp_(eve:KeyboardEvent):void {
if (eve。keyCode==Keyboard。UP) //放开上 { }
if (eve。keyCode==Keyboard。DOWN) //放开下 { }
if (eve。keyCode==Keyboard。LEFT) //放开左 { }
if (eve。keyCode==Keyboard。RIGHT) //放开右 {
if (vx>0) { }
17
if (vy<0) { }
vy=0;
if (vy>0) { }
vy=0;
if (vx<0) { }
vx=0;
vx=0;
}
}
3。2。2 玩家坦克发射子弹
在经典坦克游戏中,玩家发射的子弹上限只能有一个。这个功能的实现很简单,在玩家类中添加一个子弹数的参数(buNum),只有当它等于0,也就是舞台上没有玩家子弹时,才能发射子弹,这样就保证了子弹数的唯一。发射子弹的原理就是用Flash中的addChild方法添加一个玩家子弹类的实例,具体实现方法如下:
在onEnterFrame()函数中添加代码判断玩家发射的子弹数。 if (MovieClip(parent)。buNum<1)
在键盘按下事件方法中加入发射子弹的代码。 if (ev。keyCode==Keyboard。CONTROL)
}
}
{
if (isArmed) {
MovieClip(parent)。buNum=1; var bu:Bullet= new Bullet(); MovieClip(parent)。addChild(bu);
isArmed=false; //发射完毕后不能再次发射子弹
}
{
isArmed=true; //isArmed为true说明当前可以发射子弹
18
3。3 玩家子弹类
玩家子弹类同样是一个静态的图片,但是在子弹元件中添加了发光滤镜,如图3。3。1所示。
图3。3。1 玩家子弹元件设计界面
3。3。1子弹的速度与方向
子弹的速度也分横坐标的速度和纵坐标的速度,分别为vx和vy,由于子弹实例是由玩家类创建,所以子弹一被创建就会有一个固定的速度和方向,定义一个变量_BulletFX来表示子弹的飞行方向,子弹要获取方向要用到以下语句:
_BulletFX=MovieClip(parent)。player。fangxiang;
其中MovieClip(parent)表示子弹的父级对象,即State元件,通过点方法找到玩家类中的方向参数(fangxiang),通过方向值,改变横坐标和纵坐标的速度,这样子弹就会沿着玩家坦克面对的方向发射了。
19
具体实现方法如下:
添加\加载到舞台\事件函数。 public function Bullet():void
{
addEventListener(Event。ADDED_TO_STAGE,onATS_); //只有当子弹
被加载到舞台时才会触发onATS_内部的代码
}
编写加载到舞台时的事件方法。
public function onATS_(e:Event):void { vx=0;
vy=0;
//让子弹在被加载时赋予子弹方向和速度
_BulletFX=MovieClip(parent)。player。fangxiang;向,由于子弹与玩家同方向,所以可以直接赋值
if (_BulletFX==1) { x=MovieClip(parent)。player。x; y=MovieClip(parent)。player。y-20; vy+=-15;
}
if (_BulletFX==2) { x=MovieClip(parent)。player。x+20; y=MovieClip(parent)。player。y; vx+=15;
}
if (_BulletFX==3) {
x=MovieClip(parent)。player。x;
20
获取玩家的方
//
}
y=MovieClip(parent)。player。y+20; vy+=15;
if (_BulletFX==4) { }
x=MovieClip(parent)。player。x-20; y=MovieClip(parent)。player。y; vx+=-15;
//加载子弹删除和进入帧的事件方法
}
当子弹被删除时,同时删除时间监听器 public function onRFS_(e:Event):void
3。3。2 子弹的碰撞
子弹被创建之后,第一步先要将被创建的子弹“上传”到父级类(State)中的bulletCS参数中,因为要保证碰撞的唯一性,检测敌人与子弹的碰撞就写在了敌人类中。子弹类中碰撞是检测子弹与墙和边框的碰撞,子弹撞到了墙或者超出了边框,则子弹自身被删除,玩家类中的子弹数(buNum)变为0,子弹消失后玩家便可以再次发射出子弹。
下面为具体实现方法:
在加载到舞台事件函数中添加进入帧事件监听器。
addEventListener(Event。ENTER_FRAME,onEnterFrame_);
21
addEventListener(Event。REMOVED_FROM_STAGE,onRFS_);
{ }
removeEventListener(Event。ADDED_TO_STAGE,onATS_); removeEventListener(Event。REMOVED_FROM_STAGE,onRFS_); removeEventListener(Event。ENTER_FRAME,onEnterFrame_);