【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5)
博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果,
转载的时候请务必注明出处:http://blog.csdn.net/yangyu20121224/article/details/11177559
经过一个多月利用业余时间对于Cocos2D-X坚持不懈的学习和努力,对于大部分的基础知识基本上已经学的差不
多了,当然博主要学习的还有很多,依然会继续将《Cocos2D-X开发学习笔记》专题写下去,总结在学习的过程中遇
到的一些困难以及解决的方法,让那些初学者也可以少走一些弯路。
但是,只是一味的学习基础知识是不够的,我们还需要实战项目的磨练,将零散的知识结合起来,才能开发出一
个完整的游戏,我们学习Cocos2D-X游戏引擎的目的不就是为了开发游戏么?所以博主决定一边学习新的知识,一边
以实战项目为主,对之前学习过的内容进行加强和巩固,以达到事半功倍的效果。
一、开发前的准备
对于有经验的开发者而言,在项目开始之前,都会对策划和需求进行分析建模,把描述性的文档转换成开发模
型,并对诸如命令规则等的标准进行统一。这在团队开发中尤为重要。虽然接下来的是独立开发,当仍有必要确立唯
一的标准。
这里我们将使用驼峰命名法以及MVC模式进行开发,并且在开发过程中将代码可读性作为首要的考虑因素,而且
博主也会为其注上详细的注释。
MVC模式是软件工程中的一种软件架构模式,包括模型(Model)、视图(View)、和控制器(Controller)3部
分。模型包括了数据和逻辑等,并不关心界面上的显示形式。视图则不包含程序上的逻辑,仅监控模型中的数据,并
根据数据的内容,将其在界面上显示出来。控制器则起到不同层面间的组织作用,用于控制应用程序的流程及消息传
递。根据程序的复杂程度,视图和模型的分离程度可能也有所不同。在此我们不进行更深层次的讨论,只在接下来的
内容中说明如何在Cocos2D-X的实战项目开发中运用这种模式。
二、视图(View)
游戏中的视图包括了CCScene下所有可见的节点和元素。在MyFishingJoy游戏项目中存在两个场景:开始场景和
游戏场景。
开始场景:
开始场景由于预加载资源,这是游戏开发中常用的做法。在游戏开始之前,将外部资源加载进缓存中来保证游戏
过程中的流畅性。在Cocos2D-X中,共有4个缓存区,它们是CCTextureCache、CCSpriteFrameCache、
CCAnimationCache和CCShaderCache,分别对应图片纹理、精灵、动画和着色器。我们需要做的是调用这些缓存提
供的接口,异步载入资源,并以进度条的形式实时提示玩家当前的载入进度。载入完成之后方可进入下一场景。因
此,其界面并不复杂,除了简单的背景和标题之外,仅有一个需要更新的进度条。
游戏场景:
游戏场景是整个游戏的核心,包含了大部分的游戏逻辑和数据,也是游戏可玩性的体现。其界面比较复杂,大部
分可见元素都需要根据数据的变化实时更新。在开发的初期,我们应看重完成游戏场景,制作出游戏的雏形,而不是
把时间花费在菜单、载入界面等与游戏相关性较弱的地方。
三、模型(Model)
这部分主要包括了游戏逻辑数据。在之前基础知识的学习中,我们已经知道了可以通过CCUserDefault、XML、
JSON、SQLite或其他方法对游戏数据进行持久化的存储。这些方法的技术难度和功能都有其不同的倾向,例如,
SQLite比起XML,更倾向于大型数据的处理。我们需要根据游戏中的需求慎重选择对应的技术。
MyFishingJoy项目中的数据主要分为两部分:静态数据和动态数据。
1、静态数据
静态数据是程序中的只读数据,例如图片名、NPC的名字、道具的售价甚至是图片的坐标等。这些数据不会在游
戏过程中发生改变,然而,在开发过程中它们却可能经常变动。为了便于修改,一个常规的做法是把这些数据放到外
部文件进行保存,杜绝硬编码。
我们会在今后的实战项目中选择使用plist(property list)保存静态数据,并使用plist编辑工具进行必要的修改。在
程序中,通过调用以下代码读取文件,并以字典的形式存储在缓存中。
CCDictionary* dic = CCDictionary::createWithContentsOfFile(const char *pFileName);
提示:对于静态数据的存储,我们还有许多备选方案,例如,使用CocosBuilder存储精灵的坐标、角度和比例等信息,亦或是使用PhysicsEditor存储物理游戏中刚体的参数等。大家有兴趣的话不妨进一步探索方便我们开发的工具。
2、动态数据
相对于静态数据,这部分数据在游戏过程中会频繁变动,例如玩家的金币数和经验值等。所以,我们需要选择便
于在程序中读写的数据保存形式。
对于MyFishingJoy项目而言,动态数据有玩家的金币数以及音乐音效的大小。这些数据都是线性结构,没有嵌套
关系,而且数据量也很小,因此我们使用Cocos2d已经封装好的CCUserDefault即可。
提示:也许有些朋友会觉得使用SQLite、JSON或者其他一些技术看上去显得酷一些,但在实际开发过程中,慎重
选取更简洁、更符合需求的技术,往往能更好地降低开发的人力和时间成本,也能够使程序的效率得到提高。
四、控制器(Controller)
控制器主要负责模型和视图之间的信息传递。在Cocos2d的定义中,CCScene作为场景内所有内容的载体出现,
而其本身并不直接在界面上显示。这无疑是最好的控制器。我们可以在这里进行数据与场景、场景与场景之间的交
互,即将CCScene类的对象作为逻辑控制和信息传递的“总司令部”。
【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)的更多相关文章
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建
一.创建文件~ MainMenuScene.h MainMenuScene.cpp MainMenuLayer.h MainMenuLayer.cpp 那个场景的搭建就不多说了,那个我的打 ...
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建
一.创建文件· FishAchor.h还有FishAchor.cpp. 主要就是创建每种鱼的类,方便以后的取用~,很多是重复性的操作,然后我们是mini版,暂时也就加入大概6钟鱼就好= =,然后我们现 ...
- 【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注 ...
- iOS cocos2d 2游戏开发实战(第3版)书评
2013是游戏爆发的一年,手游用户也是飞速暴增.虽然自己不做游戏,但也是时刻了解手机应用开发的新动向.看到CSDN的"写书评得技术图书赢下载分"活动,就申请了一本<iOS c ...
- html5 canvas简易版捕鱼达人游戏源码
插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...
- Cocos2d-X开发教程-捕鱼达人 Cocos2-x development tutorial - fishing talent
Cocos2d-X开发教程-捕鱼达人 Cocos2-x development tutorial - fishing talent 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- 基于HTML5的捕鱼达人游戏网页版
之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript ...
- 一次不成功的脚本Hack[捕鱼达人游戏]
捕鱼达人这款游戏[http://keleyi.com/game/1/] 想当然的以为在这个id为“fishContainer”的div上绑定一个点击事件,子弹就可以快速的发射. 为此用油猴挂载了一个j ...
随机推荐
- USACO The Tamworth Two 模拟
一道模拟题不过要担心的是牛或者人在转弯的时候,另一方如果能走,那么要走,不能停留. 还是蛮简单的. 调试输出的话可以看到具体追击过程 Source Code: /* ID: wushuai2 PROG ...
- web前端如何让网页布局稳定性和标准性?
刚开始学css+div布局的同学们,都比较困惑和难写的就是兼容性的问题了,特别是ie6等低版本的浏览器,随意国内逐步慢慢消失取代,但是现阶段还是会有点考虑因素再里面.我们写的网页布局怎么样才是合理的, ...
- 给centOs添加epel源
epel简介: https://fedoraproject.org/wiki/EPEL/zh-cn 1. rpm -Uvh http://dl.fedoraproject.org/pub/epel/5 ...
- 编译cm12.1
背景 Ubuntu 14.04 64位,硬盘空间大于100G 更新系统至最新版本号,在终端下输入 sudo apt-get update sudo apt-get upgrade 安装编译必需软件包 ...
- KeyValuePair用法(转)
转载自:http://blog.sina.com.cn/s/blog_9741eba801016w61.html C# KeyValuePair<TKey,TValue>的用法.结构体,定 ...
- Eclipse使用技巧总结(三)
十六.快速关闭窗口 关闭当前打开窗口 Ctrl + W 关闭当前打开的所有窗口 Ctrl +Shift +F4 十九.重命名 F2 二十.快速回到上次编辑点 Ctrl + Q 二十 ...
- QPointer更安全,QScopedPointer自动出范围就删除,QSharedDataPointer帮助实现隐式共享
http://blog.csdn.net/hai200501019/article/details/8474582http://blog.csdn.net/hai200501019/article/d ...
- JAVA技术专题综述之线程篇(1)
本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield( ...
- Jquery学习笔记:操作form表单元素之二(复选框和单选框)
在上面文章的基础上,我们介绍如何操作表单元素中的 复选框和单选框. 一.复选框 <label> <input type="checkbox" id="i ...
- Robot Framework: 自定义自己的python库
利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现.这在rf中,就需要自己定义python库.这个过程其实不复杂,本文来介绍下. ...