




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号:( )字 号本科生毕业设计(论文)基于Cocos的大富翁游戏设计与开发 题目: 姓名: 学号: 班级: 年 月中 国 矿 业 大 学本科生毕业设计姓 名: 学 号: 学 院: 计算机科学与技术学院 专 业: 信息安全 设计题目: 基于Cocos的大富翁游戏设计与开发 专 题: 指导教师: 职 称: 年 月 徐州中国矿业大学毕业设计任务书学院 计算机学院专业年级 姓名 任务下达日期: 年 月 日毕业设计日期: 年 月 日 至 年 月 日毕业设计题目:基于Cocos的大富翁游戏设计与开发毕业设计专题题目: 毕业设计主要内容和要求:研究内容:(1)使用cocos2dx-3.2引擎作为底层,以c+语言为逻辑编程;(2)实现精灵的移动、按钮创建和点击、游戏关卡选择、帧动画的播放,消息的注册,发送和监听,粒子效果的播放;(3)开发系统的,模块组织结构清晰的游戏,尽量多地使用cocos2d api,以熟练掌握和运用。工作要求:在完成最低工作量:(1)设计与开发基于Cocos的大富翁游戏;(2)装订好的论文电子版设计论文;(3)程序源代码;(4)尽量完成该课程设计的其他要求及一些扩展功能。院长签字: 指导教师签字:中国矿业大学毕业设计指导教师评阅书指导教师评语(基础理论及基本技能的掌握;独立解决实际问题的能力;研究内容的理论依据和技术方法;取得的主要成果及创新点;工作态度及工作量;总体评价及建议成绩;存在问题;是否同意答辩等):成 绩: 指导教师签字: 年 月 日中国矿业大学毕业设计评阅教师评阅书评阅教师评语(选题的意义;基础理论及基本技能的掌握;综合运用所学知识解决实际问题的能力;工作量的大小;取得的主要成果及创新点;写作的规范程度;总体评价及建议成绩;存在问题;是否同意答辩等):成 绩: 评阅教师签字: 年 月 日中国矿业大学毕业设计答辩及综合成绩答 辩 情 况提 出 问 题回 答 问 题正 确基本正确有一般性错误有原则性错误没有回答答辩委员会评语及建议成绩:答辩委员会主任签字: 年 月 日学院领导小组综合评定成绩:学院领导小组负责人: 年 月 日摘 要制作一个游戏,在技术上来说,首先需要的是一款好的引擎,为什么需要引擎呢?引擎提供的是基础的一些功能,一个游戏通过使用引擎的功能模块,来进行游戏的制作,游戏的本体部分则需要交给自己的逻辑来处理,一个游戏引擎,能决定游戏的制作,甚至能决定最终的品质,而很多大作宣传的噱头就是使用了某款引擎,可见一款游戏引擎对游戏制作的重要性。对于PC端来说,虚幻4,寒霜3引擎是目前比较好的游戏引擎,使用其制作的游戏,效果也是相当惊人。对于移动端来说,Unity 3D 和Cocos2d是目前最流行的两款引擎,在2014年以前,两款引擎各持半壁江山,主要原因是一个是3D引擎,一个是2D引擎,在游戏制作里中各有需要,两款引擎各出了无数优秀的作品,2014年之后,Unity 3D 开放2D模块,Cocos2d开放3D模块,弥补了自身的不足,使得开发人员着手一种引擎即能完成3D和2D的开发工作,而Cocos2d相对于Unity 3D也是有很多的优势,它是一款开源的,活跃的,跨平台的,免费的面向所有开发人员的引擎,对于即将着手游戏行业的程序开发人员来说,是一款再好不过的上手引擎。本文首先从整体上介绍了国内外Cocos技术的发展现状,然后丧心病狂地扯了足足40页,最后结束。关键词:Cocos2d;C+11;API;单机版游戏;大富翁;Abstract这边是待写的的英文翻译Keywords: HTML5; Canvas; JavaScript; stand-alone games;tank war;目 录1 绪论11.1课题的目的和意义11.2国内外发展现状21.3课题主要的内容和功能介绍31.3.1课题主要的内容31.3.2坦克大战游戏功能介绍31.4相关技术简介41.4.1 HTML5标准简述及意义41.4.2 JavaScript标准简述及意义41.4.3 CSS标准简述及意义51.5开发工具61.6本文章节安排72 系统分析82.1系统设计分析82.2系统需求分析82.2.1系统角色82.2.2需求分析82.2.3用例分析93 系统概要设计113.1系统总体功能设计113.1.1程序功能模块分析113.1.2地图读取以及修改113.1.3游戏进行中的声音的控制分析123.2程序流程123.3各模块及对应的功能144 系统详细设计164.1数据管理模块设计164.2地图功能模块174.2.1读取地图174.2.2绘制地图174.2.3地图模块部分代码204.3坦克模块的设计214.3.1读取数据管理模块信息214.3.2控制坦克214.3.3坦克模块的部分实现代码224.4炮弹模块的功能244.4.1读取数据管理模块信息244.4.2控制炮弹飞行254.4.3炮弹模块的部分实现代码254.5声音控制模块284.6系统奖励模块功能284.7游戏中动画界面模块功能295 总结与展望325.1总结325.2展望32参考文献34翻译部分35英文原文35中文译文38致 谢41第 39 页中国矿业大学2015届本科生毕业设计(论文)1 绪论1.1课题的目的和意义由于2015年尚未结束,我先举几个例子分析一下2014年移动端游戏的现状:1:2014年,中国移动游戏市场实际销售收入274.9亿元人民币,比2013年增长了144.6。2:2014年,中国移动游戏市场占有率达到24,比2013年上升了10.5个百分点。3:2014年,中国移动游戏用户数量约达3.58亿人,比2013年增长了15.1。近几年来,随着移动设备技术的精进,性能不断更新进步,移动游戏发展迅速,移动游戏市场成为整体市场增长最强动力。在市场分析来看,在中国,2013年安卓平台上的游戏,cocos2d的使用率为26%,而ios的使用率为49%。可见这款引擎的热手程度。在当前市场火热,移动端游戏市场前景一片大好的前提下,去了解当下最为热门的一块游戏引擎,是非常明智的选择。而对于游戏而言,选择一个好的游戏引擎也是其开发制作中最重要的一环,有一句话应正了这一点,一款游戏的品质不能单单看他使用的是什么引擎,但是一款好的游戏引擎却往往可以决定这款游戏的最终效果。作为一款开源的跨平台游戏引擎,Cocos2d为无数手游开发者提供了稳定,方便,并且可靠的平台,据官方社区统计,到目前为止,基于cocos2dx开发的游戏,在全球范围内,已经至少有了一亿的安装量,在我的现在的公司,其中cocos2d的项目,石器哪里走,现在已经上线,正常盈利。另外值得一说的是,Cocos2d可以使用c+,Lua,javascript,heml5,C#以及其余多种语言和平台进行开发,其对开发人员的友好性也可见一斑。对于整个市场而言,人们越来越频繁地使用移动设备,而大多数使用移动设备的情况,都是在玩游戏,对于一个如此庞大的市场,研究和掌握一款移动设备上的游戏引擎,并且进行游戏开发,符合市场需求。对于一个游戏开发者,游戏引擎是必须接触的一块内容,有了一个好的游戏引擎,游戏开发者可以直接调用引擎的接口,实现原本需要很复杂的代码才能实现的功能,所以有了游戏引擎,游戏开发者可以着手游戏逻辑的制作,而不用费力处理底层的效果实现,提高了开发效率。对于我个人而言,使用一款游戏引擎,研究,开发,并完成一款属于自己的游戏有很大的研究学习价值,对于我个人也能较大提升自我价值,并且学习Cocos,不仅是研究该款引擎而已,同时能结束了解了Cocos引擎的结构,对今后的系统设计,模块设计,接口设计,甚至对C+语言本身的了解都能进一步加深。 1.2国内外发展现状首先,以一句官方的介绍开头:Cocos2d-x是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。Cocos2d-x核心优势在于允许开发人员利用C+、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、黑莓(BlackBerry)及Tizen等等,省事省力省成本。据不完全统计,cocos2d-x引擎在国内手机游戏开发使用的份额接近70%,而国外使用份额则是接近25%,在苹果APP排行榜top10里面,有7个都是用cocos2d-x引擎开发的。Cocos2d-x用户不仅包括个人开发者和游戏开发爱好者,还包括许多知名大公司如Zynga、Wooga、Gamevil、Glu、GREE、Konami、TinyCo、HandyGames、IGG及Disney Mobile等。截止2013年9月,全球基于Cocos2d-x引擎的游戏下载量高达逾15亿,其中许多还占据苹果应用商店(AppStore)和谷歌应用商店(Google Play)排行榜。同时许多公司如触控、谷歌、微软、ARM、英特尔及黑莓的工程师在Cocos2d-x领域也非常活跃。目前,Cocos拥有包括Cocos2d,Cocos,Cococs2d-JS,Cocos Code IDE,Quick-Cocos2dx在内的多种产品,其中包含各式各样的编辑器,满足可视化编辑UI和控件的功能,而就引擎而言,Cocos2d又派生出了许多不同的分支引擎,不同分支的引擎支持不同的目标平台并使用不同的编程语言。主要分支可以参考下表:分支引擎编程语言平台Cocos2dPython桌面操作系统Cocos2d-iphoneObjective-C, JavaScriptiOSCocos2d-xC+, Lua, JavaScript参见支持平台和编程语言部分Cocos2d-html5JavaScript支持HTML5的浏览器ShinyCocosRubyiOSCocos2d-windowsC+Windows XP/7Cocos2d-androidJavaAndroidCocos2d-android-1JavaAndroidCocos2d-xnaC#Microsoft and MonoGame platformsCocos2d-javascriptJavaScript支持HTML5的浏览器Cocos-netC#Mono-supported 平台Cocos3dObjective-CiOS1.3课题主要的内容和功能介绍1.3.1课题主要的内容课题的主要内容是使用Cocos2dx引擎实现大富翁类型的游戏,实现游戏的开始菜单、关卡选择、场景搭建、声音设置、用户信息存储与读取。1.3.2大富翁游戏功能介绍用户在安装大富翁apk后,即可开始大富翁游戏。游戏支持与电脑AI进行对战。游戏主要功能包括:(1) 开始菜单可开始游戏,读取记录,背景音乐的开关,退出游戏。(2) 玩家选择开始游戏后进入关卡选择界面,可选择3中关卡进行游戏。(3) 玩家点击GO按钮后可以随机行走1-6步,行走完毕依据当前地图可选择执行购买空地图,升级当前房屋和缴纳税金功能,当一方的金钱小于等于0则判断胜负,并结束游戏。(4) 游戏中出现的地图可以在资源里通过地图编辑器进行编辑。(5) 轮到玩家行走的时候点击保存按钮可以保存当前游戏状态,下次游戏可以通过主菜单进行读取。1.4相关技术简介1.4.1 Cocos2dx简述及意义 cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创建自己的多平台游戏时节省很多的时间。Cocos2d最初的版本是用python写的,之后被改成objectiveC,应用于iphone上,之后国内某人又根据该设计理念,将其改为C+版本cocos2dX,该版本可以在iphone,widnows,andriod三个平台上运行.最新的版本是1.0.0,该引擎C+的版本还引入了lua脚本系统.cocos2d是完全开源的引擎,开发者可以任意使用该代码而不用公开源代码.cocos2d被广泛的使用,其中包括Zynga,南宫梦等知名游戏公司.Cocos2d不仅仅只是一个2D图形引擎库,他还提供了一些对游戏逻辑支持的系统.cocos2d提供了一个简单的声音引擎,支持播放mp3,wave,ogg等文件格式的音乐.cocos2d可以和物理引擎box2d配合使用,实现碰撞等物理效果.cocos2d引擎的结构清晰,文档和实例比较丰富.易学易用.总结以下coco2d拥有以下优点: 易于使用:游戏开发者可以把关注焦点放在游戏设置本身,而不必消耗大量时间学习晦涩难懂的OpenGL ES,此外,Cocos2D还提供了大量的规范。 高效:Cocos2D基于OpenGL ES进行图形渲染,从而让移动设备的GPU性能发挥到极致。 灵活:方便扩展,易于集成第三方库。免费:基于MIT协议的免费开源框架,用户可以放心使用,不用担心商业授权的问题。社区支持:关心Cocos2D的开发者自发建立了多个社区组织,可以方便的查阅各类技术资料。2.1 cocos2d 基本结构 在Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于节点类Node)。可以执行Action来修改游戏节点的属性,使其移动、旋转、放大、缩小等等。每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程,游戏流程的管理由Director来执行.(1)导演(Director)一款游戏好比一部电影,只是游戏具有更强的交互性,不过它们的基本原理是一致的。所以在Cocos2dx中把统筹游戏大局的类抽象为导演(Director),Director是整个cocos2dx引擎的核心,是整个游戏的导航仪,游戏中的一些常用操作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的。因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是项目里取到的director都是同一个。用getInstance() 方法取得Director的实例。(2)场景(Scene)Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,就像在电影中变换舞台和场地一样。场景的一个重要的作用就是流程控制的作用,我们可以通过Director的一系列方法控制游戏中不同的场景的自由切换。下面是Director控制场景的常用方法:runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-startAnimation。pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。popScene() 释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用end() 释放和终止执行场景,同时退出应用pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上同时场景是层的容器,包含了所有需要显示的游戏元素。通常,当我们需要完成一个场景时候,会创建一个Scene的子类,并在子类中实现我们需要的功能。比如,我们可以在子类的初始化中载入游戏资源,为场景添加层,启动音乐播放等等。(3)层(Layer)Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。通常,层中的对象功能类似,耦合较紧,与层中游戏内容相关的逻辑代码也编写在层中,在组织好层后,只需要把层按照顺序添加到场景中就可以显示出来了。要向场景添加层,我们可以使用addChild方法。addChild( Nodechild ) addChild( Nodechild, int zOrder ) addChild( Node *child, int zOrder, int tag )其中,Child参数就是节点。对于场景而言,通常我们添加的节点就是层。先添加的层会被置于后添加的层之下。如果需要为它们指定先后次序,可以使用不同的zOrder值。tag是元素的标识号码,如果为子节点设置了tag值,就可以在它的父节点中利用tag值就可以找到它了。层可以包含任何Node作为子节点,包括Sprites(精灵), Labels(标签),甚至其他的Layer对象。(4)精灵Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下:简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。1.5开发工具该项目需要多种软件和工具的支持,接下来介绍运用的主要工具以及该工具的作用。(1) Python2.7:Cocos2d最初的版本是用python写的,现在创建新项目也需要通过Python来创建。 (2) tmx地图编辑器(tIDE Tile Map Editor):瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎。不论你的游戏是角色扮演游戏, 平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源的瓦片地图编辑器Tiled Map Editor生成并保存为TMX文件格式,被Cocos2d-x支持,可编辑瓦块,斜视地图和六边形地图。(3) 红孩儿工具箱:他用用于将多幅图片合成plist文件,同时也能将plist文件拆解成多张小图。(4) Cocos2d-x-ParticleEditor:一个开源的例子编辑器,打开bin目录下的ParticleEditor.exe 开启工具,里面包含了粒子实例,我们可以从中选取部分粒子效果为我所用,也可以自己编辑效果,并且可以边修改右边的数据边浏览效果。(5) Eclipse:Eclipse是一个开放源代码的、基于Java的可扩展开发平台,在这个项目里,主要是用它移植项目到apk。(6) Visual Studio 2013:微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件,在这个项目,我们用来完成整个项目的逻辑代码。1.6本文章节安排本文共分为五章,基本内容安排如下:第1章 绪论,阐述了课题的目的及意义,介绍了相关技术目前国内外的发展现状,概述了课题的主要内容及功能,之后又详略有序的介绍的相关技术和多款 的开发工具。第2章 系统分析,主要是对该系统进行了需求分析和用例分析,对系统的总体结构进行了分析,对系统的功能模块进行了划分。第3章 系统概要设计,主要是对该系统的程序模块进行分析、地图读取及修改、游戏中的声音控制分析,之后给出了程序流程图,最后分析了实现该游戏的各个模块需要解决的问题,并提出了解决方案。第4章 系统详细设计,首先对该系统的服务端进行了设计分析,之后又对地图功能模块、坦克模块、炮弹模块、绘制画面等各个部分的具体实现进行了说明,然后给出了实现这些模块的部分关键代码。最后一部分是总结与展望,总结了系统的优点与不足,并提出可进行扩展的功能设计,给出了下一步的研究方向。2 系统分析2.1系统设计分析良好的用户体验对于每一种游戏来说都是非常重要的。所以良好的用户体验需要做到以下几点:(1) 界面友好:游戏使用界面要做到一目了然,直观简洁,并且易于操作。(2) 使用流畅:要能够快速响应并处理相关信息。(3) 可扩展性:在满足了游戏设计时的基本功能要求之后,还要能够进一步扩展其附加或其他的功能。(4) 节省资源:无论任何时候,资源都必须尽可能的做到有效并高速利用,能够使得更加节省系统的资源,特别是对于游戏应用来说,要做到快速、准确的响应用户操作,就必须合理利用并配置有效资源,使资源利用最大化。2.2系统需求分析2.2.1系统角色游戏玩家:可由玩家操作的角色。对手:由AI操作的角色。2.2.2需求分析游戏类设计要能够提供友好的、便于用户操作的界面,同时能够接受用户的各项操作请求,并将这些请求转化为与之相对应的各项命令。其功能需求主要包括以下几个方面:(1) 开始菜单用户能够通过菜单进行开始游戏,读取游戏,音乐设置,退出游戏的设定。(2)背景音乐在用户进行游戏的过程中,可以根据某个或某几个特定的操作播放出已设定好的相关的声音效果,同时可以播放一些背景音乐,避免了游戏过程中的单调乏味,可以使用户得到放松,丰富了游戏的功能,增加了游戏的可玩性。(3)地图选择功能用户能够自己选择想玩的地图。(4)游戏主要玩法玩家控制的角色,点击GO按钮后能进行随机1-6步的行走,在停下时能弹一个对话框,提示是否购买空地,如果该空地已经有自己的房子并且能升级,则弹出是否升级的对话框,如果自己房子等级已满,则可多行走一次,如果是对方的房子,则需缴纳费用。3 系统概要设计3.1系统总体功能设计3.1.1程序功能模块分析本游戏功能模块主要分为:(1) 菜单模块:主要游戏的主要设定。(2) 对话框模块,游戏中多次使用该模块,而且也是由独立的代码管理,所以单独出来,作为一个独立模块进行讲解。(3) 地图选择模块:主要负责用户的相关操作,游戏界面的绘制、相关地图的修改、实现相关数据的发送以及接受等功能。(4) 地图模块:主要的游戏场景,玩家操作人物进行游戏,以及保存游戏都在此模块。(5) 数据存储模块:使用json文件格式(cocos API)对游戏数据进行存储,读取时根据数据读取,重新布置场景。3.1.2地图读取以及修改游戏要能够比较容易地自主设计并可以自由的修改游戏界面上已经形成的游戏地图,同时还可以根据修改后的地图灵活的改变整个游戏的关卡多少和游戏的难易程度等。3.1.3游戏进行中的声音的控制分析必须根据游戏中不同的操作设计播放相关的声音片段。游戏能够流畅、自如的播放出指定声音片段。3.2程序流程根据本游戏功能场景划分,游戏程序主要分为三个各自独立的场景。(1) 开始菜单开始菜单为游戏打开时首先需要操作的部分,对于这部分的设计,采用传统单机游戏的设计:开始游戏,读取记录,背景音乐开关,退出游戏的模式,同时在可操作按键之外,还添加了一个LOGO和一个移动的彩虹精灵增加趣味。该场景如图3.2所示。 开始菜单场景大富翁LOGO飘动的彩虹选择按钮否是退出返回菜单确定?退出游戏开/关音效设置读取游戏选择存档读取进度开始游戏选择地图单机游戏图3.21 开始菜单设计流程图(2)对话框模块:对话框设置回调函数创建对话框添加按钮添加内容添加标题设置宽高根据添加的按钮个数等分排列按钮添加标签按下状态按钮正常状态按钮设置tag图3.22 对话框设计流程图(3)地图选择场景,该场景由一个可滑动的层和一个背景层组成,滑动层里又由3个精灵层组成,当滑动到一个位置并点击的时候,可以选择该地图进行游戏。主要使用到的cocos2dx 的API有如下4个。1:精灵容器:添加3个图片精灵到精灵容器里,并设置其坐标(精灵容器长3个屏幕,高一个屏幕)2:scrollview对象将精灵容器添加到ScrollView对象中,并设置其属性,如是否可触摸,滑动方向,是否可弹性滑动,坐标,大小等。3:自定义adjust_scroll_view方法,用来进行拖动后位置调整若滑动距离超过设定值,则切换到下一张图,根据当前是第几张图片,来调整scrollview的位置,从而实现位置的矫正。4:Scene场景转换:TransitionFadeDown向下百叶窗式换场景地图选择场景如图3.3所示。滑动距离足够滑动距离不足滑动距离足够滑动距离不足进入左侧地图进入右侧地图不能向右滑动不能向左滑动左边还有地图右边没有地图了右边还有地图左边没有地图了向右滑动向左滑动玩家选择单机游戏进入地图选择界面弹回当前地图并进入游戏弹回当前地图并进入游戏 图3.3 地图选择场景流程图(4)地图场景。地图场景是游戏与玩家交互的最主要的部分。采取的设计方法是设计一个地图基类,该基类拥有场景所具备的所有功能,然后游戏场景继承自该基类,通过读取TMX文件以及对数据的设定来决定每个地图的各个特点。设计流程图如图3.4:游戏场景3游戏场景1游戏场景2玩家金钱背景显示地图部分玩家信息部分地图基类继承自设置人物及逻辑Tilemap地图编辑器背景图片玩家头像绘制表格背景部分行走区域建造区域图3.4 场景模块(2) 数据存储模块。该模块把两个角色的各种信息,以及建造区域的瓦块信息存入json文件中,每个地图都有各自的文件名,之后根据文件名进行区分读取。具体格式如下表名词解释map_level地图种类gameRoundCount回合数players1playerTag角色tag,用来区分角色playerPosition_xX坐标playerPosition_yY坐标money金钱comeFromeRow上一格行编号comeFromCol上一格列编号isMyTurn该回合是否行走过2playerTagplayerPosition_xplayerPosition_ymoneycomeFromeRowcomeFromColisMyTurnlandlayer1xX坐标yY坐标gid2xygid3xygid.4 系统详细设计4.1菜单模块设计4.1.1:背景背景添加了两个精灵,一个是中间位置的大富翁LOGO,另一个是左上角左右移动的精灵。背景其他部分填充为白色。在该项目中,我用Photoshop编辑了3张移动的精灵,每次打开该场景,都会随机一张图片作为飘动模块,丰富细节。bool start_menu:init()./添加背景的若干个精灵add_background_sprite();.return true;相关API介绍:1:Sprite:create(const std:string& filename) :创建精灵2:Sprite:setPosition(const Vec2& pos):设置坐标3:Sprite:setScale(float fScale):设置精灵比例4:Sprite:setAnchorPoint(const Vec2& anchor):设置描点5:Node:addChild(Node *child) :把对象添加到父节点6:MoveBy:create(float duration, const Vec2& deltaPosition):移动7:MoveBy:reverse():反向移动8:Sequence:create(FiniteTimeAction *action1, .):让多个动作按照前后顺序逐一执行9:RepeatForever:create(ActionInterval *action):对目标动作进行永久性的重复运动10:Action * Node:runAction(Action* action):精灵执行行动4.1.2:按钮bool start_menu:init()./添加若干个菜单(按键)精灵add_menu_sprites();return true;按钮由两部分组成,一是按键图片,二是图片上的文字。其需要设置的有按钮的坐标,按钮的大小,按钮对应的tag,按钮按下后按下效果,按钮何时调用回调函数,以及按钮按下所需要调用的回调函数。在该项目中,每按下一个按钮,都会调用start_menu:menu_touch_down函数,然后由该函数根据按钮TAG进行区分,进行相应的操作。 具体回调实现如下:addTargetWithActionForControlEvents(this, cccontrol_selector(start_menu:menu_touch_down), Control:EventType:TOUCH_DOWN);对应操作函数里的实现过程如下:switch (tag)case start_game_tag:/*开始游戏按钮*/此时会弹出地图选择场景,操作为pushScene,还可以添加对应的popScene操作把场景退出,返回开始菜单场景Director:getInstance()-pushScene(map_choose_scene:create_scene();break;case lode_game_tag:/*读取游戏按钮*/弹出读取游戏的对话框,一共有3个可以读取的位置,对应3个不同的地图,如果该地图没有记录,则会显示一个空的记录popup_load_game_layer();break;case music_tag:/*音乐设置按钮*/获得音乐的状态bool music_on = UserDefault:getInstance()-getBoolForKey(MUSIC_ON_KEY, true);if (music_on)/*当前是音乐开启的状态,此时需要把文字设置为音乐关闭,并且TAG也要设为false,关闭所有背景音乐*/设置tag为falseUserDefault:getInstance()-setBoolForKey(MUSIC_ON_KEY, false);/按钮被选中后文字响应的状态,即把文字改为music offbutton-setTitleForState(MUSIC_OFF, Control:State:NORMAL);/关闭背景音乐CocosDenshion:SimpleAudioEngine:getInstance()-stopBackgroundMusic();else/*当前是音乐关闭的状态,此时需要把文字设置为音乐开启,并且TAG也要设为true,然后随机播放一首音乐*/设置tag为true,即把文字改为music onUserDefault:getInstance()-setBoolForKey(MUSIC_ON_KEY, true);/按钮被选中后文字响应的状态button-setTitleForState(MUSIC_ON, Control:State:NORMAL);/随机播放一首背景音乐rand_play_bg();break;case quit_game_tag:/*退出游戏按钮*/弹出关闭游戏的对话框,之后再由用户选择对应的操作quit_layer();break;default:break;4.1.2:效果演示:4.2场景选择模块4.2.1添加背景添加一个背景,在滑块滑动的时候,能一直显示该背景,在该项目中,我用Photoshop编辑了3张背景图,每次打开该场景,都会随机一张地图作为背景展示,丰富细节。bool map_choose_scene:init().add_background_sprite();.return true;4.2.2添加一个可左右滑动的层首先,需要一个层供玩家滑动,这个层的大小,长是屏幕宽的3倍,高为屏幕的1倍,这个层有3个精灵,每个精灵都是一副缩小版的地图,占据一个屏幕,所以,具体的流程如下:1、 创建一个Layer2、 创建3个Sprite3、 将这3个Sprite加入到Layer中,并设置对应位置4、 设置该Layer的坐标和大小,大小为3个屏幕宽,一个屏幕高5、 创建一个scrollView,然后把Layer添加到该scrollView6、 设置scrollView的弹性滑动,丰富细节7、 把该scrollView加入到场景另外,该层需要添加触摸监听,这样,当玩家手指移到屏幕上滑动的时候,他才会有对应的回应,关键代码如下:bool map_choose_scene:init() ./设置为单点响应,即一次只能由一个手指操作,多个手指同时触摸之后相应第一个手指的动作setTouchMode(Touch:DispatchMode:ONE_BY_ONE);/添加触摸监听auto listener = EventListenerTouchOneByOne:create();/不向下触摸,简单点来说,比如有两个sprite ,A 和 B,A在上B在下(位置重叠),触摸A的时候,B不会受到影响listener-setSwallowTouches(true);/添加了三个回调函数,分别当触摸按下时,滑动时,滑动结束时的回应回调,这边只有结束时才需要做操作,其他两个函数都是没有任何操作的listener-onTouchBegan = CC_CALLBACK_2(map_choose_scene:on_touch_began, this);listener-onTouchMoved = CC_CALLBACK_2(map_choose_scene:on_touch_moved, this);listener-onTouchEnded = CC_CALLBACK_2(map_choose_scene:on_touch_ended, this);/把监听事件加入该层Director:getInstance()-getEventDispatcher()-addEventListenerWithSceneGraphPriority(listener, this);return true;4.2.3效果展示4.2.3根据当前位置加载对应地图当用户点击,或者滑动距离不够时,用户的操作应该是需要进入到当前地图,此时,需要一个变量current_page来存储当前的位置,该值默认为1,当用户滑动时,应该根据用户的滑动方向来改变该值,同时,滑动结束,如果滑动距离大于一定值,表示用户需要换一张地图,此时,也应该有一个修正位置的操作,此时也是根据该值来矫正,把当前地图位置弹回到屏幕中间。其实,所有操作都是在用户滑动结束后进行的,所以,应该在4.2.2中谈及的map_choose_scene:on_touch_ended函数来处理。部分代码实现如下:void map_choose_scene:on_touch_ended(Touch*touch, Event *unused_event)/获得触摸点坐标Point end_point = Director:getInstance()-convertToGL(touch-getLocationInView();float distance = end_point.x - begin_touch_point.x;if (fabs(distance) touch_distance)/滑动的距离大于预定距离,根据滑动的距离来矫正位置,比如向右移动一定位置,则切换到下一张地图背景adjust_scroll_view(distance);else/滑动的距离小于预定距离,矫正位置到当前地图背景CCPoint adjust_pos = ccp(-visible_size.width * (current_page - 1), 0);scroll_view-setContentOffset(adjust_pos, true);if (current_page = 1)/ 弹出对应场景,向下百叶窗式换场景auto scene = TransitionFadeDown:create(2, BeachScene:createScene();Director:getInstance()-pushScene(scene);if (current_page = 2).4.3地图场景部分该地图首先需要对地图的背景做处理,主要有两个部分,TMX地图和右侧信息框,TMX地图是场景的主要部分,人物移动和地块的升级都在该场景处理,而右侧信息框主要是展示一些玩家的信息,和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系统架构设计师考试的知识验证方法试题及答案
- 药品可及性与医疗公平研究试题及答案
- 考研现代汉语试题及答案
- 系统架构设计师的职业定位与未来发展试题及答案
- 航务面试题及答案
- 电工考试题型及答案
- 药剂学复习攻略的有效性评价试题及答案
- 西医临床考生必读试题及答案
- 育婴师如何设计学习计划试题及答案
- 医疗社工笔试题及答案
- 江西省人才发展集团有限公司招聘考试内容
- 高中主题班会 奋力拼搏圆梦高考课件-高三下学期冲刺高考主题班会
- 2025年上半年绩溪县龙川控股集团限公司公招聘15人易考易错模拟试题(共500题)试卷后附参考答案
- 2025-2030全球及中国汽车制动卡钳行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 武汉市部分学校2025届高三第四次月考(数学试题)试题
- 化学中考试题及答案宁夏
- 【2025 中考模拟】3月石家庄十八县初三摸底考试物理试卷(含答案)
- 《寓言故事中的对比》群文阅读(教学设计)-2023-2024学年统编版语文三年级下册
- 基于PLC的自动生产线控制系统的设计毕业论文
- 17J008挡土墙(重力式、衡重式、悬臂式)图示图集
- 【S镇35kV变电站一次系统设计(论文)14000字】
评论
0/150
提交评论