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

3.子弹发射

子弹发射概述:

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

发射原理:

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

《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇03:子弹发射》
图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开源游戏引擎:游戏起源,皆因有我!!!

 


上一篇:排查Hive报错:org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Start of Array expected


下一篇:MinerUrl.java 解析页面后存储URL类