当前位置: 首页 > news >正文

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

3.子弹发射

子弹发射概述:

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

发射原理:

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


图3-1

实现方法:

步骤1
添加子弹

01public 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:

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

01public 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 
20public 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//从死亡的容器中,间隔一定时间使子弹活过来,即发射子弹
02public 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开源游戏引擎:游戏起源,皆因有我!!!

 


 

转载于:https://www.cnblogs.com/G-3D/p/3522542.html

相关文章:

  • 交换机的link-dependency链路依赖功能
  • 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹
  • 解决:导入第三方jar包后,仍然出现java.lang.NoClassDefFoundError的错误
  • javascript deferred
  • c#对象的内存结构(学习笔记)
  • 学习python的网址
  • 45 个非常有用的 Oracle 查询语句
  • Oracle 创建表空间一边串过程
  • 解读《TCP/IP详解》(卷1):03章:IP(网际协议)
  • LeetCode: Reverse Linked List II
  • oracle临时表(JDBC应用)
  • 笛卡尔叶形曲线所围图形的面积
  • app后端设计(7)-- 项目管理
  • Linq语言性能比较
  • Enabling Process Accounting on Linux HOWTO
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Django 博客开发教程 8 - 博客文章详情页
  • HomeBrew常规使用教程
  • javascript面向对象之创建对象
  • spring security oauth2 password授权模式
  • springboot_database项目介绍
  • 创建一个Struts2项目maven 方式
  • 回顾 Swift 多平台移植进度 #2
  • 今年的LC3大会没了?
  • 力扣(LeetCode)22
  • 前端性能优化--懒加载和预加载
  • 推荐一个React的管理后台框架
  • 小而合理的前端理论:rscss和rsjs
  • 协程
  • 一道闭包题引发的思考
  • 最简单的无缝轮播
  • ionic入门之数据绑定显示-1
  • 大数据全解:定义、价值及挑战
  • 湖北分布式智能数据采集方法有哪些?
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​马来语翻译中文去哪比较好?
  • ​香农与信息论三大定律
  • (JS基础)String 类型
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (办公)springboot配置aop处理请求.
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (转)大型网站的系统架构
  • .apk 成为历史!
  • .Net CF下精确的计时器
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Standard 的管理策略
  • .net反编译工具
  • .NET分布式缓存Memcached从入门到实战
  • .NET命名规范和开发约定
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .Net语言中的StringBuilder:入门到精通
  • .php文件都打不开,打不开php文件怎么办
  • /bin、/sbin、/usr/bin、/usr/sbin