3.子弹发射
子弹发射概述:
在打飞机游戏中,子弹是自动发射的。子弹与子弹之间间隔一定的时间,玩家通过上下左右控制游戏角色,来达到躲避敌人及击中敌人的操作。
发射原理:
抽象理解为有两个容器存放子弹,其中一个容器装载死亡子弹,一个容器装载活着的子弹。二者在一定的判定条件下,将子弹循环装载、释放,达到子弹的自动发射效果。这里定义子弹总量为20发,初始状态下都存放在死亡容器中,根据开发者定义的循环条件判定,形成两容器间的子弹循环,以达到子弹自动发射效果。流程如图3-1所示。

图3-1
 
实现方法:
步骤1
添加子弹
01 | 
public class CannonMgr | 
 
05 | 
  for(int i=0;i < ActorManager.GetActiveActorCount();i++) | 
 
07 | 
       if(ActorManager.GetActiveActor(i).Name == "Cannon") | 
 
10 | 
        Actor temp = ActorManager.GetActiveActor(i); | 
 
14 | 
       else if (ActorManager.GetActiveActor(i).Name == "little_plane") | 
 
16 | 
          plane = ActorManager.GetActiveActor(i); | 
 
 
 
步骤2:
死亡容器载入子弹的判定。 发射子弹,超出预设距离的子弹死亡;击中目标,子弹死亡。
01 | 
public void Tick()//实时更新:现在所有活着的子弹 | 
 
03 | 
 if (liveCannon.Count > 0) | 
 
05 | 
  //使所有活着的子弹向前移动,当其一出屏幕范围使,设置其为死亡 | 
 
06 | 
  for (int i = 0; i < liveCannon.Count; i++) | 
 
08 | 
   liveCannon[i].WorldPosition += new Vector3(0.0f,speed * Util.GetDeltaTime(),0.0f); | 
 
10 | 
   if ((liveCannon[i].WorldPosition.Y - plane.WorldPosition.Y) > shootRange) //死亡判定:子弹与游戏角色的距离超出一定范围 | 
 
13 | 
   iveCannon[i].Deactive(); | 
 
14 | 
   deadCannon.Add(liveCannon[i]); | 
 
20 | 
public void AddDead (Actor beDead)        | 
 
23 | 
 deadCannon.Add(beDead); | 
 
24 | 
 if (liveCannon.Contains(beDead)) | 
 
26 | 
  liveCannon.Remove(beDead); | 
 
 
 
步骤3:
自由发射子弹。间隔一定时间使子弹活过来,即发射。
01 | 
//从死亡的容器中,间隔一定时间使子弹活过来,即发射子弹 | 
 
02 | 
public void ShootCannon () | 
 
04 | 
 if (deadCannon.Count > 0) | 
 
06 | 
  reloadTimer += Util.GetDeltaTime(); | 
 
07 | 
  if (reloadTimer > 0.1f) | 
 
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); | 
 
 
引擎官方网站:http://www.genesis-3d.com.cn/
官方论坛:http://bbs.9tech.cn/genesis-3d/
官方千人大群:59113309   135439306
YY频道-游戏开发大讲堂(完全免费,定期开课):51735288
Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!
 
 												
												
						- 简单物联网:外网访问内网路由器下树莓派Flask服务器
		
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
		 
						- 利用ssh反向代理以及autossh实现从外网连接内网服务器
		
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
		 
						- 外网访问内网Docker容器
		
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器  ...
		 
						- 外网访问内网SpringBoot
		
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
		 
						- 外网访问内网Elasticsearch WEB
		
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1.  ...
		 
						- 怎样从外网访问内网Rails
		
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
		 
						- 怎样从外网访问内网Memcached数据库
		
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
		 
						- 怎样从外网访问内网CouchDB数据库
		
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
		 
						- 怎样从外网访问内网DB2数据库
		
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
		 
						- 怎样从外网访问内网OpenLDAP数据库
		
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
		 
		
	
随机推荐
	
									- IPC$命令详解
			
一 摘要二 什么是ipc$三 什么是空会话四 空会话可以做什么五 ipc$所使用的端口六 ipc管道在hack攻击中的意义七 ipc$连接失败的常见原因八 复制文件失败的原因九 关于at命令和xp对i ...
			 
						- Android 在Intent中传递接口
			
总结:在Activity中不能用intent传递匿名接口,原因如下:Activity A中生成了匿名接口M, 这个接口的引用就在组Activity A中,Activity A会禁止接口M 序列化.因为 ...
			 
						- JDBC学习总结(一)
			
1.JDBC概述     JDBC是一种可以执行SQL语句并可返回结果的Java API,其全称是Java DataBase Connectivity,也是一套面向对象的应用程序接口API,它由一组用 ...
			 
						- 盘点PHP编程常见失误
			
概述:本文盘点PHP开发者在编码时,容易忽略或不注意引起的小失误与错误. 变量声明 如果在一条语句中声明一个变量,如下所示:$var='value';编译器首先会求出语句右半部分的值,恰恰正是语句的这 ...
			 
						- YCM安装与配置
			
1.重新编译vim 2.通过vundle安装YCM 3.安装CMake 4.下载预先编译好的llvm+clang 5.看官网的命令,生成CMake的编译文件并编译 配置YCM: 要额外配置ycm_ex ...
			 
						- ffmpeg  2.8.1 最新版本 VS2013 可调式动态库
			
ffmpeg 2.8.1 最新版本 VS2013 可调式动态库 由于大多数初学者都在想尽各种版本寻求VC编译调试ffmpeg的版本,我也曾经移植过几个版本的ffmpeg到VC上编译.: 链接所需动态库 ...
			 
						- trackr: An AngularJS app with a Java 8 backend – Part II
			
该系列文章来自techdev The Frontend 在本系列的第一部分我们已经描述RESTful端建立在Java 8和Spring.这一部分将介绍我们的第一个用 AngularJS建造的客户端应用 ...
			 
						- Hibernate与Jpa的关系,终于弄懂
			
我知道Jpa是一种规范,而Hibernate是它的一种实现.除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实 ...
			 
						- Android仿iPhone晃动撤销输入功能(微信摇一摇功能)
			
重力传感器微信摇一摇SensorMannager自定义alertdialogSensorEventListener 很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内 ...
			 
						- Python3 学习第三弹:异常情况如何处理?
			
python 的处理错误的方式: 1> 断言 assert condition 相当于 if not condition: crash program 断言设置的目的就是因为与其让程序晚点崩溃, ...