3。1。1 游戏主界面
游戏布局元件包含了特效图层和功能图层。特效图层为带有“boom”的图层,在游戏时能让画面闪烁,增加动感。功能图层部分中的玩家图层包含玩家元件(Player)、游戏结束图层包含游戏结束元件(GameOver)、关卡图层包含关卡元件(GuanQia)、生命图层包含玩家生命值元件(Health)、游戏边框图层包含游戏区域和游戏背景。其中红色边框为舞台区域,游戏运行时舞台区域以外的元件是不可见的。
3。1。2 全局脚本
全局脚本即游戏布局(State)元件的的脚本(State。as),它具有以下作用:
1.存储游戏数据。
游戏数据包含了下列变量:
public var bulletX:Number;
2. 实现游戏特效。
游戏,在flash中是一个可以被玩家控制的影片剪辑,所以游戏布局元件也有他自己的时间轴,有了时间轴就有了帧,每一帧都是一个静态的图片,根据帧频快速播放后就形成了动画。游戏特效建立在下面这个函数上 onEnterFrame_(),它的作用是影片每一次播放一个帧,此函数都会运行一次。现在主流的Flash游戏帧频都是60fps,所以onEnterFrame_()函数每秒都要运行60次。
12
//玩家子弹的横坐标 //玩家子弹的纵坐标
public var bulletY:Number; public var enemyX:Number; public var enemyY:Number; public var bossX:Number; public var bossY:Number; public var i:Number; public var j:Number;
//敌人的横坐标 //敌人的纵坐标 //领主的横坐标 //领主的纵坐标 //敌人出现延时 //领主出现延时
//玩家子弹参数 //分数
public var bulletCS:Bullet; public var score_:int=0; public var d:Number;
public var buNum:Number=0; //玩家子弹数(控制在1之内) private var init_:Boolean=false; //是否可以初始化
//屏幕抖动参数
//玩家子弹攻击力(只适用于领主) //领主生命值
public var des:Number; public var bossH:Number;
在此款坦克大战游戏中,由函数控制的特效有两个:第一是屏幕抖动
(DouDong()),他模仿了击毁敌人使的空气震动效果。在抖动函数中有两条语句,它们的作用是让整个State元件在横坐标上随机移动-2~2像素,纵坐标随机移动-2~2像素,实现屏幕抖动功能。onEnterFrame_()函数控制了屏幕抖动参数d,如果d<6,则屏幕开始抖动,如果d>6,则屏幕静止不动,每次抖动d都会自动增加1,直到d大于6为止,避免屏幕一直抖动不停。如果屏幕静止了,则让d等于20,避免d无限增大下去。第二个特效为全屏渐变,在游戏中全屏渐变的元件都添加在前面带有boom的图层中,不同的图层有不同的颜色和效果,比如游戏开始时,整个屏幕从一团白色中渐变出来,模拟了士兵上战场的特效。
3.控制游戏进程。
在上面的参数中,我们可以看到有两个参数,i和j,他们就是控制游戏进程的参数。一个新关卡开始时,i=0,每一帧i自动增加1,当i大于120时,则会生成一个普通的敌军坦克,并且i再次等于0,实现了敌军不断增援的效果。同理,j开始也等于0,当j大于3000时,将会出现一个领主坦克,领主坦克出现时,i和j等于一个极大的负值,这样就不会继续出现敌军普通坦克和领主坦克。
参数des,这是玩家坦克对领主的伤害值,它的初始值为0。2,我们在这里规定它不小于0。05。
参数bossH,这是领主的生命值,是由领主类的一个计算方法得出的,它显示了玩家要击毁领主需要多少颗子弹。
在游戏结束时,如果玩家要重新开始游戏,则需要对游戏进行初始化,初始化的参数是init_。
4.评判玩家技术。
在游戏中,每击毁一辆敌军坦克都会增加分数。在游戏结束时,GameOver元件会从舞台外部移动到内部,并且系统会根据分数判定你的军衔等级,军衔等级包括新兵、上等兵、中尉、少将等等。
13
3。2 玩家类
玩家类是影片剪辑类,但它实际是一个简单的图形,并且有一个图层,如图3。2。1所示。
图3。2。1 玩家元件设计界面
3。2。1 玩家坦克的移动
玩家坦克有自己的横坐标x,纵坐标y。在玩家类中需要添加键盘监听器,在玩家类中,同样拥有自己的onEnterFrame_()函数。类中负责玩家移动的参数是vx和vy,它们是横坐标和纵坐标上的速度,实现玩家移动效果只需要将两句代码加入到onEnterFrame_()函数中,即x+=vx; y+=vy; 为了不让玩家超出移动范围,需要将玩家的横纵坐标限制在一个矩形范围内,并且根据键盘的按键来判断坦克的旋转角度。代码如下:
private function onEnterFrame_(e:Event):void {
14
x+=vx; y+=vy; if (x>1125) { x=1125;
}
if (x<75) { x=75;
}
if (y>625) { y=625;
}
if (y<125) { y=125;
}
if (fangxiang==1) {
rotation=0; }
if (fangxiang==2) {
rotation=90;
}
if (fangxiang==3) {
rotation=180;}
if (fangxiang==4) {
rotation=270;} } }
15
玩家在移动时,通过按键盘上上下左右,坦克会随着按键进行和移动旋转,让坦克的炮口对着移动的方向。如果放开按键,则速度等于0。实现方法如下:
在舞台中加入键盘按下和弹起事件的监听器: public function Player():void {
编写键盘按下事件的方法:
private function onKeyDown_(ev:KeyboardEvent):void
stage。addEventListener(KeyboardEvent。KEY_DOWN,onKeyDown_); stage。addEventListener(KeyboardEvent。KEY_UP,onKeyUp_); addEventListener(Event。ENTER_FRAME,onEnterFrame_);
}
{
if (ev。keyCode==Keyboard。UP) { }
if (ev。keyCode==Keyboard。DOWN) { }
if (ev。keyCode==Keyboard。LEFT) { }
if (ev。keyCode==Keyboard。RIGHT) {
16
//按下上
vy=-6; vx=0; fangxiang=1;
//按下下
vy=6; vx=0; fangxiang=3;
//按下左
vx=-6; vy=0; fangxiang=4;
//按下右