基于Cocos Creator引擎的游戏开发技术研究

2020-07-12 08:02闵磊江汉大学
消费导刊 2020年45期
关键词:碰撞检测子弹控件

闵磊 江汉大学

一、引言

伴随着便携式硬件技术的进步,基于移动终端的各类应用软件迎来了新的发展契机。人们利用手机或平板电脑等移动设备,可以随时随地通过各类APP进行学习、购物或是娱乐。在众多面向移动终端的应用中,游戏软件具有较大的发展需求。当今社会高速发展,人们的生活节奏日益加快,在碎片化的时间里适当地利用游戏进行休闲,可以在一定程度上缓解人们紧张的情绪,有益身心健康。此外,游戏产业集动画技术、计算机技术、软件技术于一体,可以有力拉动高新技术产业的发展。

自计算机技术出现以来,游戏工业就保持着强劲的发展势头,各类相关技术和开发方法都取得了较大进步。但是,从“PC时代”到“移动互联网时代”的转变,也为传统游戏产业带来了新的挑战。目前,各类游戏都在积极推出基于手机等移动端的新版本,以适应人们对移动化应用的需求。在众多游戏开发引擎中,Cocos系列游戏引擎对于移动设备的支持相对较为完善,可便捷地发布针对Android、IOS等平台的应用。Cocos Creator游戏引擎是在Cocos2D-X基础之上开发的具备可视化编辑功能的游戏引擎,它在保证Cocos底层引擎功能的基础之上,以可视化编辑的方式简化了游戏开发的过程,非常适合移动互联网时代高迭代的效率要求。为深入分析移动端游戏的开发原理,本文基于Cocos Creator游戏引擎,对一款经典的飞机战斗类游戏的实现机制进行了研究。一体化的开发流程则能将资源编辑、UI制作、代码编写、调试、发布等各部分工作统一以来,便于团队合作,从而提高开发效率。

目前,Cocos Creator游戏引擎支持JavaScript和TypeScript两种脚本语言。能够在项目开发完成后,通过与不同平台的SDK对接,实现Android、IOS、Web甚至微信等平台上的APP发布,从而真正做到硬件及软件层面的跨平台。在本文研究中,使用JavaScript作为开发语言,研究了相关的游戏逻辑。

二、CocosCreator游戏引擎介绍

Cocos Creator游戏引擎是Cocos系列游戏引擎中较新的一款产品,它基于Cocos2D-X,能提供Cocos引擎的大部分核心功能。此外,人性化的编辑界面可将开发者从繁琐的界面、动画等常规功能中解放出来,使其能专注于游戏逻辑本身的开发。而

三、游戏功能及原理分析

(一)游戏功能

本文所研究的是一款经典飞机大战游戏,游戏中的己方飞机由玩家操控,敌方飞机由程序逻辑自动生成,可以被视为NPC(非玩家角色)。乙方飞机有一定的生命值,在游戏进行过程中如果被敌方飞机击中,则生命值降低,降为零时游戏结束。若敌方飞机被己方击中,则直接爆炸销毁。为提高游戏的真实性,敌方子弹与己方子弹如果发生碰撞则相互销毁,产生爆炸效果。玩家对飞机的操控通过编写的操控控件来实现,该控件可适应手机终端的触控拖动事件,能通过锚点的拖动来实现飞机飞行方向和速度的控制。每击中一架敌方飞机,得分分数增加,游戏结束时的分数代表本轮游戏的成绩。

(二)工程架构

不管游戏的逻辑如何,界面上所呈现的无非是飞机子弹的运动、各种特效以及用于用户交互的UI控件。为了使结构更加清晰,这些元素在架构上可进行分离,构成“界面表现与交互层”。而对于游戏的规则和逻辑,则主要由程序员通过代码层面的算法来实现。因此,该层可作为“逻辑运行层”,主要承担游戏逻辑的运行。而游戏逻辑运行的直接结果,就是游戏中相关数据值的改变,例如生命值、得分、时间等,这些数据的存储和维护就依赖于“基础数据层”。

因此,“界面表现与交互层”、“逻辑运行层”以及“基础数据层”,它们共同构成了游戏工程的主体框架。

1.界面表现与交互层。负责对各种界面元素进行呈现,并承担基于UI控件的用户交互。该层的渲染功能、飞机、子弹的运动、动画,以及爆炸特效等主要借助于Cocos Creator的表现层来实现;UI控件则由Cocos Creator中基本的节点元素通过组合的方式构成,完成用户对飞机操控的交互功能。

2.逻辑运行层。该层主要实现游戏的运行逻辑,在本文所述游戏中,子弹的发射、子弹与飞机之间的碰撞检测、生命值及游戏得分的变化等,都由此层的逻辑来控制。这些逻辑主要通过游戏开发者所编写的脚本语言来实现,操控逻辑则通过“交互层”触发的事件来激活。

3.基础数据层。维护游戏运行时的状态数据,包括元素的位置、速度、运动方向、分数值等。这些数据既是逻辑层的输出,也为逻辑层提供必要的数据支撑,同时也是表现层进行数据呈现的数据基础。

(三)实现步骤

游戏的输入为用户的UI交互操作,输出为游戏的运行状态以及呈现给玩家的分数、成败等运行结果。

结合游戏的运行逻辑,可设计如下的实现步骤对游戏的过程进行描述:

步骤1:根据元素的图片创建飞机、子弹、爆炸效果等节点或动画,并创建自定义的方向触控控件等游戏必须的节点。

步骤2:针对主场景的运行,创建脚本GameCtrlJs.js,并将其作为脚本组件挂载到主场景中的Canvas下,该脚本负责对游戏主逻辑进行控制。

步骤3:对于己方飞机、敌机、子弹、爆炸效果、等分别创建对应的脚本,并挂载到对应节点上,这些脚本负责本节点的行为逻辑,例如爆炸结束后的实例销毁、飞机定期发射子弹等。

步骤4:当玩家点击游戏开始时,加载主场景,在GameCtrlJs脚本中通过schedule方法定期调用创建敌机的函数。同时,敌机依赖自身挂载的控制脚本也定期发射子弹。敌我双方的飞机和子弹分别归属于不同的分组,不同分组用于碰撞时的对象检测。

步骤5:玩家通过触控控件对己方飞机的方向和速度进行控制,并可触发射击功能。射击时动态创建己方子弹,子弹通过cc.moveBy动作进行位置的移动,当接触到敌方子弹或者飞机时,双方节点销毁并同时播放爆炸的动画。

步骤6:通过敌我双方碰撞处理的逻辑,动态调整生命值和得分,将其显示到主场景对应的控件上。如果生命值降为零,则游戏结束,将跳转到ReadyScene场景的按钮进行Active激活显示。

四、技术实现机制

(一)碰撞检测机制

在本文所述的飞机大战游戏中,最为关键的是敌我双方的飞机和子弹在运动中相遇时的碰撞检测,它将直接影响击毁或是得分的游戏逻辑,游戏通过Cocos Creator内置的物理引擎实现该功能。脚本中利用cc.director类的getCollisionManager()方法取得碰撞检测管理器,并将其enable属性设置为true。同时,将敌我双方的飞机、子弹分别设置为归属于不同的分组,对应分组之间设置碰撞检测标志。编写碰撞检测响应函数,实现相应的游戏逻辑。

(二)触控方向控件的实现

移动设备不同于传统电脑,它更多的是利用触摸屏而非键盘进行UI交互。因此,需要设计触控控件对飞机的运动方向和速度进行控制。本文在控件中设置锚点,利用节点(即该锚点)的触控事件响应锚点的拖动操作。锚点的拖动方向以及偏离中心点的位移大小则用向量来表示,向量的方向和模就代表操作飞机的方向和速度。该自定义控件也可导出为资源,供其他项目复用。

五、总结

在移动设备日益普及的背景下,开发能运行于不同移动终端的游戏产品,是游戏产业必须面对的问题。本文基于Cocos Creator游戏引擎,以一款飞机大战游戏为例分析了移动平台下游戏开发的实现机制,并对碰撞原理、触控操作等技术进行了探讨,相关研究内容对于移动平台环境下的游戏开发具有一定借鉴意义。

猜你喜欢
碰撞检测子弹控件
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
三颗子弹
子弹VS防弹
Karma:让子弹飞一会儿
关于.net控件数组的探讨
Unity3D中碰撞检测问题的研究
子弹
BIM技术下的某办公楼项目管线碰撞检测
ASP.NET服务器端验证控件的使用