Flash MX 编程深层次应用-Flash射击游戏(5)
作者: 来源: 添加时间:2006-5-23 7:25:586.2.5 敌人中的大怪(Boss)
前面讲了几个普通的敌人,但是在游戏中一般都会有大怪物,或者叫Boss。这种敌人比普通敌人要难打,而且其个体也大,发射子弹的种类也复杂。在这个游戏中,为了减少编程量,尽量使用前面的几个子弹的组合,最后加上一种激光。大怪物的造型如图6-18所示。

图6-18
1.大怪控制程序
把这个大怪物图形引用到作品中去,它的控制程序如下:
onClipEvent (load) {
//大怪的血是1500
var enemy_blood = 1500;
var half_width = _width >> 1;
//大怪发射两种子弹的时间间隔,一种是普通弹,一种是跟踪子弹
var delay_time = 600;
var delay_time_ai = 1800;
angle_begin = 200;
function shot_ai() {
_root.big_enemy_one_sound.start();
_root.fire_ai_bullet(_root.enemy2_main_x, _root.enemy2_main_y);
}
function shot_normal() {
angle_begin += 15;
if (angle_begin>340) {
angle_begin = 200;
}
_root.fire_big_enemy_bullet(_root.enemy2_main_x, _root.enemy2_main_y, angle_begin);
}
time_ai = setInterval(shot_ai, delay_time_ai);
time_normal = setInterval(shot_normal, delay_time);
}
onClipEvent (enterFrame) {
_root.enemy2_main_x = _parent._x+_parent._parent._x;
_root.enemy2_main_y = _parent._y+_parent._parent._y;
for (i=0; i<=_root.max_bullet_num; i++) {
if (!_root["my_bullet_"+i].shotted_check) {
if (_parent.hitTest(_root["my_bullet_"+i])) {
_root["my_bullet_"+i].gotoAndPlay("shotted");
_root["my_bullet_"+i].shotted_check = true;
//每次击中一次大怪得50分
_root.your_score += 50;
enemy_blood -= _root.bullet_level;
}
}
}
if (_parent.hitTest(_root.my_plane)) {
enemy_blood -= _root.bullet_level;
_root.my_blood -= 4;
}
if (enemy_blood<=0) {
_parent._parent.stop();
_parent._parent._parent.stop();
_parent.stop();
//大怪被打击后要清除定时器
clearInterval(time_ai);
clearInterval(time_normal);
//打死大怪另外加分10000分,同时清除激光武器
_root.your_score += 10000;
_parent._parent.laser_1.unloadMovie();
//转大怪爆炸程序
_parent.gotoAndPlay("bomb");
}
}
2.大怪的爆炸效果
对于游戏来说,大怪物是一个游戏的核心。很多地方都有与其他敌人不同的地方,比如它被打死后的爆炸效果就应该更酷、更真实。为了这个效果,笔者也着实花了不少功夫。最后采取的办法是在爆炸画面上再加上一个焰火效果。这个焰火效果是通过程序来复制出很多个光束,然后控制其大小与位置,从而做出非常酷的效果!如图6-19所示。

图6-19
其程序如下:
big_enemy_bomb_x = this._x;
big_enemy_bomb_y = this._y;
attachMovie("cool_bomb", "huo_center", i+_root.deplicate[12]);
huo_center._x = big_enemy_bomb_x;
huo_center._y = big_enemy_bomb_y;
for (i=1; i<=40; i++) {
//复制40束焰火
name = "bomb_fire"+i;
attachMovie("one_fire", name, i+_root.deplicate[12]+1);
//焰火角度随机确定
eval(name)._rotation = random(360);
//让焰火大小在30°~100°之间随机确定
scalefactor = 30+random(70);
eval(name)._xscale = scalefactor;
eval(name)._yscale = scalefactor;
//焰火开始的中心就是爆炸的中心
eval(name)._x = big_enemy_bomb_x;
eval(name)._y = big_enemy_bomb_y;
}
在这里焰火的质量直接决定了爆炸的质量,如图6-20所示。

图6-20
这里最关键的就是火的中心位置要密,尾部要松,然后中心是白色,过来一点是粉红色,最外面是深红色,整个效果加上爆炸动画,再加上爆炸声,真是棒极了!
3.大怪发射激光
大怪物最厉害的武器就是激光了。激光束在Flash中最好做了,只要做一个中心为白色,边上是蓝色渐变的光条便可,如图6-21所示。

图6-21
激光发射的速度非常快,因为在制作时,仅用了两帧光束就完全显示出来了,程序如下:
onClipEvent (load) {
set_time = 1000;
check = true;
}
onClipEvent (enterFrame) {
if (_parent.hitTest(_root.my_plane) && check ) {
_root.my_blood = 0;
check = false;
begin = getTimer();
}
if (getTimer()-begin>set_time) {
check = true;
}
}
如果我的飞船被激光击中,则立即死亡,然后锁定激光一秒钟,让它此时不能击打我刚出来的飞船!这里的锁定功能主要针对一些玩家被激光杀死后,却不记得要马上移开我的飞船的情形,以免再次被激光击中,也就是给玩家一秒钟的时间来移开!