在初始化时需用程序把多余的部分隐藏起来,仅显示正常飞船的数。其程序如下:
for (i=5; i>=my_plane_number; i--) {
eval("my_plane_num_"+i)._visible = false;
}
当我的飞船爆炸时就同时减少一个显示,代码如下:
_root["my_plane_num_"+(_root.my_plane_number-1)]._visible = false;
_root.my_plane_number--;
这个代码已经包含在前面的飞船控制程序中了。如果此时我们接到一个令牌,就应先对_root.my_plane_number如果接到令牌后,就清除之
_parent.unloadMovie();
}
}
在这里,令牌移动的x个点,这样就保证了令牌的随机下落,而不会呆板地直线下落。当然了,令牌如果移出屏幕还没有被飞船接到,就清除它。
_root.my_blood += 15;
_parent.unloadMovie();
if (_root.my_blood >50) {
_root.my_blood = 50;
}
} else {
//如果武器威力已经到最大值则加200.直线运动的敌人
程序如下:
>定义一下敌人血液值
enemy_blood = 6;
half_height = _height>>1;
}
>这后面的两句是敌人移动的核心语句
_parent._parent.enemy1_main_x = _parent._x+_parent._parent._x;
_parent._parent.enemy1_main_y = _parent._y+_parent._parent._y+half_height;
for (i=0; i<=_root.max_bullet_num; i++) {
//
_root["my_bullet_"+i].shotted_check = true;
//敌人死了,就让它停止运动,然后爆炸,给我加分
_parent._parent.stop();
_root.your_score += 20;
_parent.gotoAndPlay("bomb");
}
}
这段程序中最核心的那两句是求出敌人的当前位置。它主要的目的是求出敌人发射子弹时子弹的初始位置。由于在考虑的时候采用的是面向对象的方法,也就是说把程序与画面封装起来,所以采用的是相对路径的方式。这段程序被加载在敌人的MovieClip
,按一定的规则给它们取名字,这样可以轻松地看出它们的层次调用关系:
原始飞机图片→敌人程序→敌人移动动画
通过这样一个MC
attachMovie("enemy_bullet", new_name, big_temp+_root.deplicate[8]);
//函数来计算出每次子弹移动的距离。为了加快程序执行的速度,在系统初始化时就先把sin.按特定路径运动的敌人
如果一个游戏只有直线飞行的敌人,那么这个游戏肯定没有人愿意玩,因此游戏中很重要的一点就是要设置敌人按特定的有规律的方式运动。这时才可真正理解到前面为什么一定要让程序与动画各自独立。因为敌人飞行的路径可以千变万化,如果全部用程序来模拟这个运行路线,将是一个非常可怕的工作量。值得庆幸的是,Flash这样,我的飞船就难以打到敌人了。而在动作的同时可以再发射一些子弹,如图6-17如图6-17帧的程序用于发射子弹,它们的调用方式如下:
_root.enemy_fire(enemy2_main_x,enemy2_main_y)
发射子弹的程序如下:
functi>敌人发射子弹的程序,散弹!
for (var j = 0; j<_root.enemy_powder; j++) {
temp = _root.enemy_bullet++;
if (temp>_root.deplicate[5]-_root.deplicate[4]) {
temp -= _root.deplicate[3]-_root.deplicate[4]+1;
}
var new_name = "enemy_bullet_"+temp;
attachMovie("enemy_bullet", new_name, temp+_root.deplicate[4]);
_root[new_name]._x = place_x;
_root[new_name]._y = place_y;
angle = 270+(j-1.0-_root.enemy_pwder/2)*_root.angle_between;
_root[new_name].x_move = _root.cs[angle-1]*20;
_root[new_name].y_move = _root.sn[angle-1]*20;
}
_root.enemy_bullet = temp+1;
}
这个程序发射出来的子弹函数是一种散弹,方向是270颗子弹。
这个放令牌的敌人的程序与前面的直线运动敌人的程序基本上一样,只有其血量值及下面这条语句不同:
_parent._parent.enemy2_main_x = _parent._x+_parent._parent._x;
_parent._parent.enemy2_main_y=_parent._y+_parent._parent._y+_parent.half_height;
这里将变量名与直线运动区分开是为了区分不同的物体,区分不同的敌人,从而保证每个敌人发射的子弹仅跟自己位置有关。在敌人爆炸的那个帧里放上下述加血令牌语句:
_root.put_blood(_parent.enemy2_main_x,_parent.enemy2_main_y-_parent.half_height)
attachMovie("bomb_bullet", new_name, bomb_temp+_root.deplicate[13]);
_root[new_name]._x = place_x;
_root[new_name]._y = place_y;
angle += bomb_between;
_root[new_name].x_move = _root.cs[angle-1]*20;
_root[new_name].y_move = _root.sn[angle-1]*20;
}
_root.bomb_enemy_bullet = bomb_temp+1;
}
9
attachMovie("blue_bullet",ai_new_name,_root.ai_enemy_bullet+_root.deplicate[7]);
_root[ai_new_name]._x = place_ai_x;
_root[ai_new_name]._y = place_ai_y;
// >表示子弹每次移动的距离
var >这里的跟踪子弹是最简单的跟踪弹。就是敌人判断我的飞船的位置后,向我所在的中心位置发射的子弹。但是如果我马上移开,就不会被打中了。这里的角度计算代码ai_angle=180…°。同时也保证(对应Sin°至180°范围之内。这样的话,如果将180
上一篇:5ucms模版,Flash MX 编程深层次应用-Flash射击游戏(6) 下一篇:5ucms仿站,Flash MX 编程深层次应用-Flash射击游戏(9) |
|
本站声明:本网站所载文章等内容,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权及其它问题,请在30日内与本网联系(Email:3876307#qq.com),我们将在第一时间删除内容。若原创内容转载请注明出处。 5ucms模版,Flash MX 编程深层次应用-Flash射击游戏(4)的关键词: |