• 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇03:子弹发射》


    3.子弹发射

    子弹发射概述:

    在打飞机游戏中,子弹是自动发射的。子弹与子弹之间间隔一定的时间,玩家通过上下左右控制游戏角色,来达到躲避敌人及击中敌人的操作。

    发射原理:

    抽象理解为有两个容器存放子弹,其中一个容器装载死亡子弹,一个容器装载活着的子弹。二者在一定的判定条件下,将子弹循环装载、释放,达到子弹的自动发射效果。这里定义子弹总量为20发,初始状态下都存放在死亡容器中,根据开发者定义的循环条件判定,形成两容器间的子弹循环,以达到子弹自动发射效果。流程如图3-1所示。


    图3-1

    实现方法:

    步骤1
    添加子弹

    01 public class CannonMgr
    02  {
    03  public void Init()
    04  {
    05   for(int i=0;i < ActorManager.GetActiveActorCount();i++)
    06       {
    07        if(ActorManager.GetActiveActor(i).Name == "Cannon")
    08        {
    09        //添加子弹
    10         Actor temp = ActorManager.GetActiveActor(i);
    11         temp.Deactive();
    12         deadCannon.Add(temp);
    13        }
    14        else if (ActorManager.GetActiveActor(i).Name == "little_plane")
    15        {
    16           plane = ActorManager.GetActiveActor(i);
    17        }
    18   }
    19  }
    20 }

    步骤2:

    死亡容器载入子弹的判定。 发射子弹,超出预设距离的子弹死亡;击中目标,子弹死亡。

    01 public void Tick()//实时更新:现在所有活着的子弹
    02 {
    03  if (liveCannon.Count > 0)
    04  {
    05   //使所有活着的子弹向前移动,当其一出屏幕范围使,设置其为死亡
    06   for (int i = 0; i < liveCannon.Count; i++)
    07   {
    08    liveCannon[i].WorldPosition += new Vector3(0.0f,speed * Util.GetDeltaTime(),0.0f);
    09    //发射子弹
    10    if ((liveCannon[i].WorldPosition.Y - plane.WorldPosition.Y) > shootRange) //死亡判定:子弹与游戏角色的距离超出一定范围
    11    {
    12    //子弹载入死亡容器
    13    iveCannon[i].Deactive();
    14    deadCannon.Add(liveCannon[i]);
    15    }
    16   }
    17  }
    18 }
    19  
    20 public void AddDead (Actor beDead)       
    21 {
    22  beDead.Deactive();
    23  deadCannon.Add(beDead);
    24  if (liveCannon.Contains(beDead))
    25  {
    26   liveCannon.Remove(beDead);
    27  }
    28 }

    步骤3: 

    自由发射子弹。间隔一定时间使子弹活过来,即发射。

    01 //从死亡的容器中,间隔一定时间使子弹活过来,即发射子弹
    02 public void ShootCannon ()
    03 {
    04  if (deadCannon.Count > 0)
    05  {
    06   reloadTimer += Util.GetDeltaTime();
    07   if (reloadTimer > 0.1f)
    08   {
    09    deadCannon[0].WorldPosition = plane.WorldPosition + new Vector3(1.0f,1.0f,0.0f);
    10    deadCannon[0].Active();
    11    liveCannon.Add(deadCannon[0]);
    12    deadCannon.RemoveAt(0);
    13    reloadTimer = 0.0f;
    14   }
    15  }
    16 }


    引擎官方网站:http://www.genesis-3d.com.cn/

    官方论坛:http://bbs.9tech.cn/genesis-3d/

    官方千人大群:59113309   135439306

    YY频道-游戏开发大讲堂(完全免费,定期开课):51735288 

    Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!

     


  • 相关阅读:
    Python:Fatal error in launcher: Unable to create process using 问题排查
    接口测试及接口Jmeter工具介绍
    bug的分类和等级
    如何编写测试用例
    网络流入门--最大流算法Dicnic 算法
    Codevs 1004 四子连棋
    洛谷 P1072 Hankson 的趣味题
    Codevs 搜索刷题 集合篇
    洛谷 P1195 口袋的天空
    洛谷 P1362 兔子数
  • 原文地址:https://www.cnblogs.com/G-3D/p/3522542.html
Copyright © 2020-2023  润新知