《毕业论文基于cocos2dx的手机游戏设计.doc》由会员分享,可在线阅读,更多相关《毕业论文基于cocos2dx的手机游戏设计.doc(18页珍藏版)》请在三一办公上搜索。
1、目录摘要1关键词1Abstract1Key words11 引言21.2 发展趋势21.3 研究意义22 Cocos2D技术分析32.1 Cocos2D-X平台技术介绍32.2 Cocos2D-X 主要功能32.3 Cocos2D-X 特点32.4 Cocos2D-X结构33 游戏系统分析与设计43.1 游戏介绍43.2 系统需求分析43.2.1 可行性分析43.2.2 功能分析53.3 系统设计分析73.3.1 游戏功能模块73.3.2 游戏目录结构例图94 游戏系统实现94.1 实体逻辑模块104.2 UI功能模块的设计114.3 推图模块124.4 战斗功能模块145 结论16致谢16参
2、考文献17基于Cocos2dx的手机游戏设计摘要:Cocos2dx是一个开源的移动2D游戏框架,在国内手机游戏开发使用的份额接近70%。随着手机等智能移动设备的高速发展,手机游戏在中国游戏市场也快速崛起。论文以软件工程思想为指导,分析了游戏策划方案,以时下流行的三消玩法为游戏依托,采用观察者模式和工厂模式等设计模式,设计并实现了一款基于cocos2dx引擎的休闲消除游戏。论文主要工作包括完成了游戏程序结构设计和资源文件结构设计,以及功能模块的开发。游戏的界面制作美观,运行流畅,功能设计基本达到了预期目标。关键词:宝石精灵 消除 cocos2dx The Design of Mobile Pho
3、ne Game Based on Cocos2dxStudent Majoring In Software Engineering DongQiangTutor YanChaoAbstract:Cocos2dx is an open source 2D game frameworks share of the domestic mobile phone game developed using close to 70%.With the rapid development of smart mobile devices such as cell phones, mobile gaming in
4、 Chinas game market is also rising quickly.Thesis under the guidance of software engineering, analyzes the game plan, with popular three elimination games as the game relies on using design patterns such as the Observer pattern and factory patterns, designs and implements a cocos2dx engine and casua
5、l elimination game.Paper work included the completion of a game program structure design and structural design of resource files and modules development.Interface of the game making beautiful, run smoothly and function design can achieve the desired objectives.Key words: Jewels Spirit;Elimination;Co
6、cos2dx;1 引言1.1 选题背景随着社会的发展,手机已经成为人们日常生活,学习办公中不可缺少的一部分,并在各个领域发挥着越来越重要的作用。手机游戏作为手机发展和普及过程中的一个产物,有着广泛的发展前景,它的出现不仅可以丰富人们的业务生活,而且为国家信息产业的发展发挥了不可替代的作用。特别是当中国加入世界贸易组织以后,国外大量的娱乐游戏、游戏迅速进入中国市场,并获得巨大成功,给中国信息产业和国内游戏企业带来了前所未有的挑战和机遇。国家为了适应市场的需要,大力提倡和帮扶国内游戏产业,给游戏企业提供了大量的政策支持,大大提高了我国游戏策划、游戏制作的实力。随着我国经济实力和信息产业的不断发展,
7、游戏必将为丰富人们娱乐生活、我国信息化建设发挥越来越重要的作用。1.2 发展趋势近年来,随着智能机的普及以及3G、4G的覆盖率增加,手机网游日益兴起,现已经有近两千万的手机网游玩家了。2014年,国内移动互联网竞争格局未定,运营商拒绝管道化欲谋更多话语权,转型力度、资源投入日趋加大;在部分细分领域,围绕运营商转型的业务和渠道价值骤然放大,引发产业整合日趋频繁。在此背景下,国内移动互联龙头拓维信息通过多年技术积累及运营商渠道优势,确定以手机动漫与游戏业务为两大核心发展方向之一。1.3 研究意义全球在使用的移动电话已经超过10亿部,而且这个数字每天都在不断增加。在除美国外的各个发达国家,手机用户都
8、比计算机用户多。手机游戏潜在的市场比其他任何平台,比如PlayStation和GameBoy都要大。在控制台游戏时代,GameBoy热销的一个原因就是便携性人们可以随时随地沉浸在自己喜欢的游戏中,还可以随时随地抢购自己喜欢的装备或宠物。和游戏控制台或者PC相比,手机虽然可能不是一个理想的游戏设备,但毕竟人们总是随时随身携带,这样手机游戏很可能成为人们消遣时间的首选。手机便携性、移动性的特征更能满足用户随时随地玩游戏的需求,用户利用排队、等车的时间进行游戏,手机游戏碎片化的特性凸显。调查显示,29.8%的用户在用手机玩游戏以后电脑端玩游戏的时间减少,手机游戏已经开始抢夺电脑游戏时间。22.4%的
9、 用户手机游戏时间越来越长,仅有10%的用户时间变短,手机游戏已逐渐成为一种普遍的娱乐方式。因为手机是网络设备,在一定限制因素下可以实现多人在线游戏。随着移动网络的发展,移动游戏也越来越多的被大家接受,对于之前长期通知市场的掌机来说造成了不少的冲击。市场研究公司IDC和App Annie报告显示2013年第一季度iOS和Android平台游戏业务营收是掌机的3倍。手机游戏市场潜力大,投入资金少,吸引了很多市场进入者,但中小SP在激烈的竞争中生存问题是需要考虑的主要问题。手机游戏开发商、游戏应及服务提供商不重视市场宣传和推广工作,忽视对于游戏产品,用户的体验和习惯培养重要性。手机游戏市场竞争激烈
10、,该竞争涉及国内,也涉及国外游戏开发商。追求低成本和短期利益,现游戏产品的质量粗糙。手机游戏的同质化也越来越严重,创新力不足。论文基于Cocos2D技术,以设计并实现了一款三消游戏为研究目标,首先学习研究cocos2d引擎的基本使用,然后设计游戏策划方案和三消算法,最后实现游戏功能。2 Cocos2D技术分析 Cocos2d最初的版本是用python写的,之后被改成objectiveC,应用于iphone上,之后国内某人又根据该设计理念,将其改为C+版本cocos2dX,该版本可以在iphone,widnows,andriod三个平台上运行.最新的版本是1.0.0,该引擎C+的版本还引入了lu
11、a脚本系统.cocos2d是完全开源的引擎,开发者可以任意使用该代码而不用公开源代码.cocos2d被广泛的使用,其中包括Zynga,南宫梦等知名游戏公司.Cocos2d不仅仅只是一个2D图形引擎库,他还提供了一些对游戏逻辑支持的系统.cocos2d提供了一个简单的声音引擎,支持播放mp3,wave,ogg等文件格式的音乐.cocos2d可以和物理引擎box2d配合使用,实现碰撞等物理效果.cocos2d引擎的结构清晰,文档和实例比较丰富.易学易用.2.1 Cocos2D-X平台技术介绍Cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。这是一个C+ C
12、ocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。手机游戏,可以写在 C+或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在IOS,Android,黑莓 Blackberry等操作系统中。Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。2.2 Cocos2D-X 主要功能Cocos2D-X主要功能:流程控制(Flow control):非常容易地管理不同场景(scenes)之间的
13、流程控制;精灵(Sprites):快速而方便的精灵;动作(Actions):告诉精灵们该做什么。可组合的动作如移动(move)、旋转(rotate)和缩放(scale)等更多;特效(Effects):特效包括波浪(waves)、旋转(twirl)和透镜(lens)等更多;平面地图(Tiled Maps):支持包括矩形和六边形平面地图;转换(Transitions):从一个场景移动到另外一个不同风格的场景;菜单(Menus):创建内部菜单;文本渲染(Text Rendering):支持标签和HTML标签动作;文档(Documents):编程指南 + API参考 + 视频教学 + 很多教用户如何使
14、用的简单测试例子;MIT许可:尽管用就是了;基于Pyglet:没有外部的依赖;基于OpenGL:支持硬件加速;3D对象:MD2模型支持;脚本语言:支持Lua,JavaScript语言。2.3 Cocos2D-X 特点易于使用:游戏开发者可以把关注焦点放在游戏设置本身,而不必消耗大量时间学习晦涩难懂的OpenGL ES,此外,Cocos2D还提供了大量的规范。高效:Cocos2D基于OpenGL ES进行图形渲染,从而让移动设备的GPU性能发挥到极致。灵活:方便扩展,易于集成第三方库。免费:基于MIT协议的免费开源框架,用户可以放心使用,不用担心商业授权的问题。社区支持:关心Cocos2D的开发
15、者自发建立了多个社区组织,可以方便的查阅各类技术资料。2.4 Cocos2D-X结构Cocos2d采用场景树结构来管理游戏对象,把一个游戏划分为不同的场景,场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏对象.游戏对象又可以执行Action来修改其属性.每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程.cocos2d还采用了引用计数的方式来管理内存,基本上所有的类都派生于拥有引用计数的机制的CCObject.其基本框架类图如下: 图2.1 Cocos2D-X基本框架类图3 游戏系统分析与设计3.1 游戏介绍宝石精灵是一款策略、战斗型三消游戏。玩家通过自身养成,技能
16、升级,然后推图打怪进行整个游戏体验。在自身养成系统中,玩家通过推图战斗,获取金币,使用金币转化钻石,利用钻石进行玩家技能升级,在战斗中可以获得相应的经验奖励,来对玩家自身攻击力进行升级。游戏主要核心玩法是玩家同NPC进行三消对打,玩家通过消除攻击宝石攻击NPC、通过消除不同颜色的宝石,积攒怒气去触发释放技能,来达到攻击或者防御NPC的效果,NPC同上。游戏本身含有24个技能,技能又分为“土系”、“风系”、“火系”和“地系”。在每个系列技能里边又有主动技能和被动技能。让玩家在游戏中可根据关卡难度来选择合适的技能。3.2 系统需求分析 在游戏开发之前,我们必须充分的了解该游戏的特点、适应性,并以此
17、作为基础为开发系统精准的定位,然后对使用者所需要实现的功能和玩法进行分析,并根据使用者实际要求来给该游戏系统设计一个开始的方案。3.2.1 可行性分析本游戏是三消策略型游戏,具体指的是一类基于三消玩法的基础上进行玩法上的创新,玩家可以通过三消宝石与守关NPC进行对抗攻击,玩家想要顺利过关必须携带合适技能的策略性游戏。游戏核心玩法目前在手游市场上还未出现类似产品,所以游戏的市场是很大的。下面从各个方面简要分析制作该类游戏的可行性。操作可行性:“宝石精灵”的每个关卡都经过了精心的设计,游戏难度逐渐增加,游戏时间逐渐增长,因而在这样的设计下,玩家可以感受到游戏的可玩性,同时也可以享受到完成游戏的成就
18、感。而且该游戏操作简单灵活,比如玩家只要会简单的三消就可以很容易上手。技术可行性:“宝石精灵”技术的实现使用的是C+语言开发,用JAVA语音进行SDK接入,当前普通的计算机在硬件配置方面完全满足开发的需求,所以在技术上绝对是可行的。在软件方面:cocos2d游戏引擎是一个让你轻松开发游戏的工具,是一个全面开发游戏的专业引擎。因此在软件开发平台也是成熟可行的。不同android平台的SDK接入都是使用JAVA语言开发接入,而且方式方法大同小异,因此接入技术可行的。游戏数据统计是通过JNI借口进行C+与Java的交互,使用友盟工具进行数据统计,因此统计技术也是成熟可行的。 社会可行性:本游戏有丰富
19、技能的加入,大大增加了游戏可玩性。多种样式变化的地图,使玩家在各个时间段和关卡都能寻找到自己挑战的目标,这会使得玩家长期保持对游戏的新鲜感。3.2.2 功能分析“三消”这类的游戏,人机交互性好,操作性强,耐玩性强。这种游戏在手机游戏的市场上不会过时,我们增加玩家对战的战斗玩法,增加酷炫技能特效是游戏具有很好的可玩性和耐玩性对。如果能实现多人同时在线的时时对战类的游戏,相信一定会受到玩家的认可与喜爱。下面从主要功能和关键功能方面来分析游戏的主要功能和关键功能,从而更好的设计出此游戏。(1)主要功能分析本游戏的主界面功能包括开始游戏、游戏商城、设置、个人信息。其中在点击开始游戏之后进入模式选择界面
20、,现在暂时开发出的是冒险模式,点击进入冒险模式后进入推图场景。推图场景第一次进入只有一个章节,完成第一章节的任务(比如本章节所有管卡必须有8关成绩超过2星)才会开启后续章节。玩家打过每一个关卡,游标会游动到下一关卡,弹出下一关卡的进入提示,挑战失败则会继续弹出本关卡的开始游戏弹框。选择了关卡之后会弹出技能选择框,要自己选择技能之后点击开始才可以进入游戏界面。游戏控制模块包含了游戏的一些基本控制,在游戏中又暂停,继续游戏,重新开始和退出游戏,其主要原理就是通过按键的状态的改变,来改变游戏的状态用来达到游戏的整体控制。其中技能升级系统是本游戏的一大特色,玩家可以通过过关来获得金币,每收集1000金
21、币会自动折算成1个钻石,通过钻石进行对技能的升级和携带。游戏一共有“水系”、“火系”、“风系”和“地系”四种类别的技能,有四种不同的技能风格,没种技能又分为四个主动技能和两个被动技能。集满怒气,释放技能不仅会对敌方造成物理伤害,还会有一定概率触发“眩晕”、“流血”、“回血”“金币翻倍”等Buff。升级技能会增加技能的影响值和提高触发Buff的概率。游戏运行方面主要包含开始游戏场景、推图场景、和战斗场景。其中游戏的每一章节都有不同的地图背景,每一关都有不同的怪物,每一种怪物都有不同的血量、攻击力和技能。玩家可以针对每一关的守关BOSS携带不同技能,来顺利过关。当怪物消除攻击宝石或者释放技能,玩家
22、会损失自己的生命值,当生命值变成零,游戏结束,当怪物被消灭,玩家就可以通过此关卡,进入下一关。游戏功能流程图如图3-1所示:启动游戏游戏商城个人信息主界面退出游戏判断游戏结束类型游戏结束释放技能消除宝石技能购买升级战斗场景推图场景模式选择图3.1 游戏功能流程图(2)关键功能分析三消类游戏主要功能点是战斗系统,三个相同颜色的宝石消除,四个相同宝石的消除产生一个特殊宝石,五个相同颜色宝石消除产生一个多彩宝石。核心玩法是三消,三消逻辑也是游戏开发的重点和难点。UI窗口的管理,跨系统弹框,场景用2D技术制作3D效果也是游戏重难点之一。关于宝石矩阵管理器,对宝石的管理是战斗核心。宝石消除后的掉落是利用
23、矩阵管理器对当前宝石矩阵的比较分析后随机产生。宝石交换判断器,监听玩家交换动作后对操作宝石进行三消逻辑判断,满足条件执行消除逻辑播放消除动画,掉落随机宝石,不满足条件播放会弹动画。矩阵出现死局时对矩阵重新刷新。战斗系统调用UI系统弹框,由于跨系统的头文件补课相互引用。UI系统必须提供全局借口,将所有弹框交给全局都可拿到的窗口管理器。AI算法,根据关卡难度要逐渐提升NPC的智能化,NPC根据智能系数对宝石矩阵进行选择消除。3.3 系统设计分析本系统主要实现的功能有“UI系统”、“数据中心” 、“技能升级系统”、“推图选关系统”、“战斗系统”。在游戏控制实现方面包含了一般游戏的“开始”,“继续”和
24、“暂停”,还有“退出”。为了增加游戏的可玩性还特别设置了技能升级、购买功能。并在游戏的运行方面做了各种不同的背景地图、各种不同的敌怪、不同类型的NPC等等。3.3.1 游戏功能模块游戏的功能模块分为UI功能模块、推图功模块、数据中心模块、战斗模块、SDK接入。(1) UI功能模块UI系统为游戏客户端显示层的表现模块,该模块主要设计思路是在监听到系统启动完毕事件后将所有窗口创建并放到窗口管理器中。主要功能要点如下:1.主场景显示UI(利用五个层级结构让2d图片凸显显示效果)。2.摄像机(封装摄像机概念,通过移动层达到移动摄像机的特点)。3.弹框UI(封装弹框动画)。4.开场动画5.新手引导6.播
25、放特效(2)推图功模块推图系统模块是控制控制整个游戏流程和生命周期的模块。该模块的主要设计思路是通过推图部件对章节和关卡进行管理。主要功能要点如下:1.推图场景(利用pageview实现章节切换)。2.选关推图逻辑。3.推图解锁动画。(3)数据中心模块数据中心模块是加载所有游戏涉及的配置表。加载进来后放到各自的加载器里边,供所有模块访问使用。主要功能要点如下:1.CSV表加载2.XML配置加载3.NI常量表加载4.数据加密(4)战斗模块战斗模块是游戏的核心模块,主要功能是处理三消逻辑,NPC对战,炫酷技能释放,让玩家有更好的游戏体验。主要功能要点如下:1. 玩家模块2. NPC模块3. 三消功
26、能逻辑4. 怒气收集,技能释放5.技能购买6.技能升级7.战斗技能释放8.Buff影响9.技能动画(4)SDK接入 SDK接入是游戏开发完成后,进行市场推广和上线准备。主要功能要点如下:1.Android平台SDK(移动MM)接入2.友盟数据统计的接入3.接入代码混淆3.3.2 游戏目录结构例图图4-1游戏结构目录例图 4 游戏系统实现通过全局对象ClientGlobal创建每个系统模块。系统之间也是通过获取ClientGlobal接口,去获取各个系统模块的接口,从而实现系统间数据的访问。游戏启动后将所有系统进行创建,每个系统模块通过全局进行管理。本章主要从实体逻辑模块,UI系统模块,推图模块
27、还有游戏的战斗模块几个方面,对游戏的设计与实现做了详细的说明。同时cocos2d是一个封装了很好的动画系统和GUI系统,并提供了相对完善的功能,大大缩短了游戏开发的周期,更好的实现了游戏的功能,因此本节也对cocos2d的一个重要的知识点进行了简要的说明与理解,使得自己更好的实现游戏。4.1 实体逻辑模块实体系统包含玩家整个游戏世界所有的现场逻辑和现场数据。实体系统主要有玩家实体Player和怪物实体Monster。游戏从启动开始,玩家实体从存盘数据读取相关信息创建玩家,游戏世界全局都可获取玩家,获取玩家部件。玩家现场数据存盘的读取设计是实体模块的核心要点。存盘数据我们采用顺序存储分配空间。v
28、oid CPlayerDBLoader:SaveDBData(CPlayer* pPlayer)sPlayer_DB * pDB = new sPlayer_DB();if (pPlayer != nullptr)if(false=pPlayer-ExportDBContext(LPCSTR)pDB,sizeof(sPlayer_DB)CCLOGERROR(玩家存盘导出数据失败);delete pDB;return ;pDB-nVerson = 1;SetBuffer(char*)pDB, sizeof(sPlayer_DB);WriteFile(Playerdata.data,true);C
29、lear();delete pDB;通过该函数将所有存盘数据存入Playerdata.data。在玩家实体的ExportDBContext(LPCSTR pszContext, int nlen)函数中访问玩家自身的存盘数据和挂载到玩家身上所有部件的存盘数据。在SetBuffer(char* buf, int nLen)函数中进行对Data进行加密处理。实体部件的设计是实体模块设计的一个创新型的设计。之前设计实体系统的时候,往往会将实体定义成现场数据中心,只是管理玩家自身的一些信息数据。这样做的话实体的概念会很大,所有的现场数据都会写到实体私有的成员变量里边,会使得实体类很难管理。我提出了实体
30、部件的概念,也就说每个功能模块都跟随一个相应的实体部件,实体需要这个部件就会挂载到身上。实体部件存放相应功能的现场存盘数据,并提供读取数据的接口供功能模块使用,每个部件都有自身的统一的读取存盘数据的操作减轻实体类的压力,这样也提高了代码可维护性和拓展性。玩家部件也会承担一下功能逻辑的处理,将有用的数据提供该功能模块。以下是实体部件向外部提供的公共继承接口:struct IEntityPart virtual bool Create(ISL_Object* pMaster, void* pszData, int nLen) = 0;virtual void Release() = 0;virtu
31、al bool Active(LPCSTR pszContext, int nlen) = 0;virtual ISL_Object* GetEntity()=0;virtual bool OnSetDBContext(LPCSTR pszContext, int nlen) = 0;virtual bool ExportDBContext(LPCSTR pszContext, int nlen) = 0;virtual int GetType()=0;4.2 UI功能模块的设计UI模块主要包含所有界面显示、UI弹框、动画特效播放等所有视图表现模式。在之前设计视图层的时候总是每一个模块单独设计
32、一个UI显示,但是遇到跨平台弹窗的时候总是很难处理,然而视图显示往往在很多地方都需要表现,所以我将UI模块写成一个系统独立出来。将所有的窗口放入一个窗口管理器里边,在收到系统启动完毕事件后,进行窗口加载并插入到窗口管理器,等到需要访问该窗口时直接去窗口管理器里边访问出来,然后对窗口进行显示和隐藏操作。获取窗口代码如下:IUiBase* CWndManager:GetWnd(std:string szWndName)std:map:iterator it =m_MapWnd.find(szWndName);if (it != m_MapWnd.end()return it-second;else
33、 return createWnd(szWndName);return NULL; 根据窗口名字szWndName去窗口管理器m_MapWnd里边去查找出对应的窗口,然后对窗口进行操纵。窗口的设计也是本系统一个重要设计创新,窗口本身是继承cocos2dx的CCNode组件,挂载一个m_pWidget,后通过UI JSON名字加载UI文件GUIReader:shareReader()-widgetFromJsonFile(m_szWndConfigJson.c_str();然后隐藏和显示操作根据Node的特性可以设置m_pWidget的viseable属性。设置ZOrder属性来控制控件的层级显
34、示。窗口创建函数/ 窗口名字if (szWndName.length() != 0)m_szWndName = szWndName;/ 配置文件if (szWndConfigJson.length() != 0)m_szWndConfigJson = szWndConfigJson;/ 安全判断if (m_szWndName = | m_szWndConfigJson = )CCLOGERROR(窗口名或者配置文件名字未定义);return false;/ 挂载父节点if (pFather = nullptr)/ 如果父节点为空的话,访问获取当前场景作为父节点CCNode*pLayer=Get
35、ClientGlobal()-GetUiSystem()-GetWndManager()-GetCurScene();if (pLayer = NULL)return false;pLayer-addChild(this);elsepFather-addChild(this);this-setVisible(false);/ 插入窗口管理器return GetClientGlobal()-GetUiSystem()-GetWndManager()-InsertWnd(this,GetName();我们在UIBase基类封装了对窗口基本操作的方法,最常用的是Show()和Hide()来控制窗口显
36、示。下面是调用弹出设置窗口的代码:CUIBase*pCUIBase=GetClientGlobal()-GetUiSystem()-GetWndManager()-GetWnd(UI_Star_Setting);pCUI_Start_Setting-setZOrder(255);pCUI_Start_Setting-Show();4.3 推图模块玩家通过推图系统进行章节解锁,关卡推图。我们用cocos2d的pageview控件进行章节切换,利用骨骼动画实现关卡解锁后的游标移动特效。推图自身玩家数据是存放在实体系统中的推图部件里。下面针对关卡设置和游标移动做详细介绍。关卡节点加载是推图系统的一大
37、特点。遍历本章地图所有关卡信息,根据关卡ID从数据中心货的对应Button信息,设置星级。实现代码如下:void CSelectLevelLayer:setWayPoint( int nMapId )/获取路点配置ISelectLevelSceneWayPointConfig* pSelectLevelSceneWayPointConfig=GetClientGlobal()-GetGameDataCenter()-GetSelectLevelSceneWayPointConfig();if (pSelectLevelSceneWayPointConfig)std:vector vec;pSe
38、lectLevelSceneWayPointConfig-GetWayPointIdByMapId(vec,nMapId);for (int i=0;iGetWayPointConfig(id);if (pLevelConfig)/根据玩家信息判断状态 已通关 待通关 未通关std:string levelImg=pLevelConfig-sPassSourcePath;/根据玩家信息if(pISelectLeveldepart-getLevelState(id)=e_levelLayer_State_pass)levelImg=pLevelConfig-sPassSourcePath;els
39、e if(pISelectLeveldepart-getLevelState(id)=e_levelLayer_State_passing)levelImg=pLevelConfig-sPassSourcePath;m_nCurrentLevelId=pLevelConfig-nId;elselevelImg=pLevelConfig-sUnpassingSourcePath;Button*pBt_Level=Button:create(levelImg,levelImg,guanka.png);pBt_Level-getTouchMovePos();pBt_Level-setTag(id);
40、pBt_Level-setAnchorPoint(Vec2(0.5,0.5);pBt_Level-setName(pLevelConfig-sName);mlevelManagerpLevelConfig-nId=pBt_Level;pBt_Level-addTouchEventListener(&(Ref* widget,Widget:TouchEventType eventType)Widget* pWidget = (Widget*) widget;pWidget-getTouchMovePos(); if(eventType = Widget:TouchEventType:ENDED)
41、/响应事件enterLevel(pWidget-getTag(););pBt_Level-setPosition(Vec2(pLevelConfig-nPotionX,pLevelConfig-nPotionY);pMapView-addWidgetToPage(pBt_Level,nMapId-1,true);if(pISelectLeveldepart-getLevelState(id) != e_levelLayer_State_unpass)/星星显示图片int levelStarNum=pISelectLeveldepart-getLevelStarNum(id);setStar(p
42、Bt_Level,levelStarNum);/设置游标if(pISelectLeveldepart-getLevelState(id)=e_levelLayer_State_passing )moveWayPoint(m_nCurrentLevelId);游标的实现应该考虑很多中情况,正常游标移动即玩家通关游标移动到下一关卡,当所通关关卡为本章地图的最后一个关卡的时候又要考虑到下一章地图能不能自动解锁,如果满足条件,自动解锁游标将移动到下一章地图的第一关卡。4.4 战斗功能模块整个游戏核心模块,下面我们针对宝石矩阵,和消除方案来做详细介绍。宝石矩阵的管理是三消游戏的关键算法,通过7X7矩阵管
43、理宝石,每个宝石都是一个独立的对象,从创建到消亡都又矩阵管理器来进行管理。节点对象基类函数借口如下:/ 重载 =virtual bool compare(CEliminateNode* pNode)if (pNode-GetType() = eEliminateUnit_pk_node_Colourfulgem)return true;return (GetType() = pNode-GetType(); virtual void Release();/ 死亡逻辑/virtual void ExDeadLogic();/ 轮次逻辑virtual void ExTurnLogic();/ 执行
44、选择virtual void ExSelectedAction();/ 执行死亡动作virtual void ExDeadAction(ccCallBackFun fun);/ 死亡动画结束virtual void DeadActionEnd();/ 移动到vecvirtual void SpriteMoveToVec2(Vec2 vec,int speed = 1.0f,ccCallBackFun fun = nullptr);/ 移动virtual void SpriteMoveToCoord(sCoord,int speed = 1.0f,ccCallBackFun fun = nullptr);/ 向下抖动一次virtual void SpriteDownAndShake(Vec2 vec,int amplitudeDown,int amplitudeUp,int speed = 1.0f,ccCallBackFun fun = nullptr);/ 直接设置坐标void SetSpriteToVec2(Vec2 vec2);virtual int GetType()return m_eType;/