中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 图形图象 > 网页设计 > Flash
Flash MX 编程深层次应用-Flash射击游戏(5)
作者:未知 时间:2005-05-27 12:12 出处:ChinaZ.com 责编:chinaitpower
              摘要:Flash MX 编程深层次应用-Flash射击游戏(5)
6.2 游戏制作(前台)(4)

    

6.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;

    }

}

如果我的飞船被激光击中,则立即死亡,然后锁定激光一秒钟,让它此时不能击打我刚出来的飞船!这里的锁定功能主要针对一些玩家被激光杀死后,却不记得要马上移开我的飞船的情形,以免再次被激光击中,也就是给玩家一秒钟的时间来移开!


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有