浅谈Cocos2d的塔防类游戏开发

2019-12-09 01:58范羚蔡琪玮
大经贸 2019年10期
关键词:场景管理器

范羚 蔡琪玮

【摘 要】 本文完成一个基于开源性游戏框架Cocos2d的塔防类游戏设计,阐述了游戏设计目的,总体规划及游戏整体框架设计,并从用户界面设计和游戏业务逻辑设计两方面详细分析了设计过程,实现了塔防类游戏中所需各类管理器的编程,并最终完成游戏开发。

【关键词】 Cocos2d 场景 管理器

一、游戏总体设计

1、设计目的和总体规划

Cocos2d游戏引擎自带多种游戏机制,其内部封装了大量动作和场景方法函数,这些方法对于游戏中使用的各种元素如精灵、场景等的表现形式有较好的实现效果,可以完成游戏元素的展示、碰撞、动作和音乐音效等,在玩法和画面上,带给游戏使用者不一样的体验。常用的游戏设计方法有:放置方法Place、隐藏方法Hide、显示方法Show、移动方法MoveTo、跳跃方法JumpTo、放大方法ScaleTo、旋转方法RotateBy、闪烁方法Blink、速度变化和组合动作等。

Z`在此次游戏机制设计上,采用鼠标进行操作,完成游戏进程中玩家所需的各种功能,比如:建塔、升级、销毁、控制游戏速度、游戏菜单设计等;在塔种类的设计上,使用尽可能丰富的塔种类,并使不同的塔有不同的素材和属性,包括建造开销、血量、攻击速度和伤害等;不同的敌方怪物也有不同的素材和属性;在子弹的构造上,将子弹设计为一个单独的实体类,具有自己的移动和伤害等方法,构造方式相对自由。

2、系统框架设计

本游戏基本系统框架采用Cocos2d进行设计。Cocos2d使用场景树结构来管理游戏对象,将游戏划分为不同的场景CCScene,再将场景划分为不同的层CCLayer。一层可以有任何可见的游戏对象,游戏对象可执行Action来修改其属性。在游戏进行的每个时刻,都存在独立运行的场景,并且通过在不同场景间切换来完成游戏进程。Cocos2d还使用引用计数来管理内存,本次使用的类都派生自具有引用计数机制的CCObject。其中CCApplication负责游戏平台的初始化和消息处理等。CCDirector用来管理场景,切换场景,游戏暂停,初始化等。CCNode是游戏中最重要的节点类对象,任何可见或不可见的游戏逻辑对象都是一个节点。CCAction是动作类,完成修改CCNode相关属性,如位置,旋转,缩放等。CCScene是场景类,可独立运行,包括可见的怪物,地形和不可见的逻辑脚本等。CCLayer是场景中的图层类,游戏场景包含多个层,如HUD图层,游戏对象图层,背景图层,天空图层等。图层是可以绘制的区域,可以添加UI,Sprite和其他对象。此外,该层还接收输入消息,该消息可以处理图层类中的输入消息,与CCScene一样,CCLayer是CCNode的子类,CCAction也可用于修改其属性。

二、游戏功能设计

1、用户界面逻辑设计

本次在设计塔防类游戏用户界面时,使用用户界面与业务逻辑分离的思想。用户界面模块用来接收用户输入及呈现数据,包括有可以实现游戏功能导航的主菜单界面,实现关卡地图的展示和关卡选择的关卡界面,用来展示怪物的怪物图鉴界面,及游戏主界面。业务逻辑模块功能是根据用户需求处理数据。

2、游戏业务逻辑设计

一般游戏引擎在对业务逻辑的处理上是使用一个死循环,当游戏运行时,根据游戏实时实现的情况,进行实时显示,不断刷新界面,使用update_game()和display_game()函数进行处理。玩家在游戏中所看到的界面,听到的音乐,以及一些输入和触动等,在游戏逻辑实现上就是这样的一个循环,游戏运行过程中,该循环一直在进行,并同步处理玩家事件。所有游戏逻辑都在这个主循环中实现,使用Cocos2d游戏引擎中Main.cpp的CCApplication:: sharedApplication ()->run()进入游戏循环。Windows系统属于消息驱动,这个死循环就是用来处理windows消息循环,并在其中處理FPS逻辑,消息分发等。本文使用CCDirector::sharedDirector()->mainLoop()作为Cocos2d的主循环,由导演CCDirector负责维护。从此处进入Cocos2d,一旦进入主循环,程序就开始执行游戏逻辑。

本次设计的游戏逻辑主要有:游戏菜单逻辑,游戏界面逻辑,游戏数据管理器,防御塔管理器,怪物管理器,子弹管理器和卡片管理器(功能管理)。

在游戏菜单逻辑中,一般游戏主要有2条功能分支,单机模式和对战模式,且单机模式和对战模式最终都指向游戏界面,本文主要实现单机模式。游戏界面是公共模块,提取公共模块,只需要进行数据和类型状态的区分,就能很好的进行代码上的规划。

游戏界面流程从加载游戏数据开始,接下来绘制UI界面,创建各类管理器,进入游戏循环,直至用户结束游戏。其中,在游戏界面逻辑中最重要的是游戏循环模块,游戏引擎已经做好了封装,开发者要关心的是游戏数据管理、UI界面、各类实体管理器(防御塔管理器、敌人管理器等)。

游戏逻辑包括游戏循环、消息机制和定时器,各类实体对象逻辑都离不开这三个部分。本文设计的塔防类游戏的各类实体管理器包括有:用来管理游戏全局数据的游戏数据管理器,通过定时器,获取子弹接口,发射子弹,及对塔防进行升级、出售等功能性操作的防御塔管理器,对游戏数据和怪物进行管理的怪物管理器,提供获取子弹接口,管理子弹的容器的子弹管理器,提供防御塔功能性接口,对防御塔进行功能性管理的卡片管理器。

三、具体实现过程

1、防御塔管理器

防御塔类管理器具有成员属性:攻击力和攻速;成员方法包括寻找攻击目标和攻击等。防御塔也有对应的防御塔管理器,负责存储管理已建造的防御塔。在防御塔类中,定时器时间间隔就是攻击速度,定时调用攻击敌人的一系列方法。

2、怪物管理器

怪物的业务逻辑封装在怪物管理器中,设计时,需先创建怪物列表,再创建定时器,在游戏场景运行过程中,通过定时器每隔一定时间,产生新的怪物,产生的怪物属性需从.json文件中读取并创建,包括怪物ID,血量,移动速度,攻击力,素材路径等。

3、卡片管理器(功能管理)

防御塔对应的功能操作在卡片管理器,点击防御塔,会调用防御塔按钮回调函数,弹出/隐藏卡片管理器界面,在此界面上实现对防御塔的升级和出售等操作。

4、资源管理器

资源管理器负责存储和管理游戏所需的游戏信息,在游戏场景创建时,读取对应的.json 文件。资源管理器是一个单例类,能在任何场景中调用,方便游戏信息的处理。资源管理器应包括游戏地图信息,敌方怪物信息和防御塔信息等屬性,且具有相应的成员方法:获取地图信息,获取怪物信息,获取防御塔信息等。

5、游戏场景逻辑

创建游戏场景后,由导演负责执行场景,执行中场景的定时器会生效,定时器定时回调场景update( )函数,并且自定义定时器将调用对象及各管理器的自定义回调函数;游戏的逻辑,包括胜利和失败条件也是在场景的update函数中进行判定:当击败怪物数量达到该地图关卡指定最大数量时,游戏获胜;当目标血量小于或等于0时,游戏失败。

6、游戏运行结果

游戏菜单是游戏的第一个界面,该界面将引导玩家选择游戏模式及功能,有单机模式、对战模式等。在单机模式下,玩家在游戏主界面进行选择关卡,游戏可提供选择丰富的游戏主题和关卡。在游戏具体场景中,玩家可以通过消耗金币,建造防御塔,以防御怪物入侵,游戏中使用的地图则是采用TiledMap格子地图构建。

在本次游戏开发过程中,较为常见的bug是资源加载问题,程序运行过程中若加载不到对应的资源,一般会导致程序的崩溃,若调用到了空资源,系统就会产生崩溃。出现这类问题时,应通过核对对应模块的资源加载代码和对应路径资源来解决。另一个较为棘手的问题是内存问题,一般这种问题是由内存管理不当引起的。Cocos2d有自己的资源管理系统,通过引用计数的机制,自动管理并释放内存资源。在手动管理资源中,应考虑系统的自动内存管理机制,加入对应的功能性代码,以避免和自动内存管理机制起冲突,引发意料之外的bug。针对这种情况,最好是尽量在编码过程中避免出现逻辑上漏洞,加强对内存的合理管理。

四、小结

本文实现了基于Cocos2d的塔防类游戏设计,主要介绍了系统框架的设计以及游戏功能设计。在系统框架设计中,详细说明了设计的总体思路,并以此为基础框架,完成游戏功能上的设计,主要有:用户界面与逻辑设计,各类管理器设计。基于Cocos2d游戏引擎的游戏业务逻辑设计能比较直观地展现Cocos2d游戏引擎在游戏开发中的应用,为其他基于Cocos2d的塔防类游戏设计提供参考。

【参考文献】

[1] [美]Stephen Prata. C++ Primer Plus[M].张海龙,袁国忠译 北京:人民邮电出版社,2015:340-377.

[2] 张岩林. 基于Cocos2D-x的卡牌类游戏框架的设计与实现[D].吉林大学,2017.

[3] 朱京晶. 基于Cocos2d-x引擎的游戏的寻路算法研究与实现[D].北京交通大学,2017.

作者简介:范羚(1977-),女,厦门工学院电子信息工程系,讲师,,研究方向:信号与信息处理。

猜你喜欢
场景管理器
启动Windows11任务管理器的几种方法
云计算中动态自适应软件体系结构重配置算法的应用
Windows文件缓冲处理技术概述
场景传播视阈下的网络直播探析
汉语语篇英译中词汇场理论和框架理论的应用研究
场景:大数据挖掘的新标准
《远大前程》的哥特式解读
高集成度2.5A备份电源管理器简化锂离子电池备份系统
在Win 7下利用凭据管理器提高访问速度等