cocos2d-x介绍
总体来说,cocos2d-x是一个优秀的库。
Cocos2d-x没有很复杂的一个架构,基本上是一些以单件形式提供的管理器和是一些围绕SceneGraph(CCNode及其派生类)展开的类。这个设计使得cocos2d在结构上很简洁,使用者很容易上手。
同时cocos2d的设计者充分利用了现成的一些游戏开发中的工具,将这些工具整合到引擎中来,例如BMFont、TexturePacker等工具,使得制作素材很方便。
作为一个跨平台的游戏库,cocos2d-x已经做的非常好。 但如果将cocos2d-x定位为一款跨平台的游戏引擎,我觉得Cocos2d-想可以朝以下几个地方发展:
1、cocos2d-x可以提供一个好的游戏框架:
cocos2d-x提供的一些Demo,以及教人写程序的方法基本是让开发人员编写一个CCScene的子类,通过子类化的方式来实现具体的逻辑,作为教学这样非常好。
作为正式开发,个人建议cocos2d-x可以提供一个具体的游戏框架,这个框架在总体上提供了一个移动平台的游戏的通用功能(例 如:LoadingScene, TitleScene, HighscoreScene等等),游戏开发人员要做的只是根据自己游戏的情况来选择定制自己的游戏。
2、cocos2d-x对游戏逻辑的支持可以增强:
对开发这来说,怎么编写游戏逻辑是一个麻烦的问题,Cocos2d-x用SceneGraph的方式来管理场景,很自然地,游戏开发人员肯定希望使 用cocos2d-x提供的方式来管理对象,这样就要从CCNode等对象派生,甚至有的开发人员还建议直接从CCSprite等万能类派生类编写功能代 码。这样做的方式并非不可以,但作为一个好的开发人员,你以后会发现这样带来的问题非常多,例如:游戏复杂了之后,你会发现继承关系层次很多,导致代码需 要不停重构来适合新的需求,最后你设计的基类越来越复杂等等。
现在比较主流的方式是使用Entity-Component系统来组合出我们的逻辑。关于Entity-Component系统这里就不再细说。仅仅简单说明一下:游戏中的对象为一个Entity,每个Entity使用由一个或多个Component构成。
例如游戏中的雷电游戏中的一架飞机可以由:Flyable(可飞行Component,提供飞行功能)、Shotable(可发射 Component,提供发射子弹的功能)、Sprite(Sprite Component,提供显示功能)、Colliable(碰撞Component,提供碰撞检测的功能)构成。
当然仅仅有Entity-Component系统,对于游戏框架来说还是不够的。例如:当子弹击中飞机的时候,是直接调用函数吗?直接调用当然不 好。首先子弹和飞机都是Entity,在外部来看,你不知道他们由什么Component组成,直接查询Component并调用Component的函 数,这明显就违背了封装的原则。如果提供了消息系统Event System,通过给Entity发送消息,Entity中的组件收到消息后,由组建去处理自己关心的消息,这样不仅实现功能,而且结构有漂亮。
3、cocos2d-x对游戏开发工具的支持:
对于游戏开发引擎来说,优秀的工具永远是第一位的。有了工具,游戏开发者就可以很快的时间做出原型,然后在这个基础上,通过快速迭代优化数值和表现来快速开发游戏。
以Cocosbuilder这样一款工具来说吧,目前阶段cocos2d-x要做一款这样的功能的工具,还需要改善一下代码。最基本的就是提供持久 化(Persistence)的支持。可以任何时刻将游戏的内容或者编辑器中制作的内容保存到磁盘文件。以后需要的时候可以打开保存的文件。
要实现这些,我觉得有几点基础需要增加:
1、提供RTTI的支持;
- 可以让一个对象在运行是判断是否是某类对象(PS:别告诉我用dynamic_cast来实现。),具体实现可以参考很多现成的方案;
2、提供类工厂的支持;
- 可以根据文件中的保存的类名等来构造出相应的类,例如:读到"CCNode"的时候,可以根据"CCNode"来创建出CCNode对象;
3、提供对象属性的设置;
- 当读取到一个属性名称和数值的时候,提供一个方式来设置对象的属性。例如读取到osition的时候,提供一个方式来设置node->setPosition(xxx)。
以上这些是个人的一点设想,希望大家也提出自己的意见。
cocos2d-x介绍的更多相关文章
- cocos2d基本类介绍 director/scene/layer/sprite
[核心类] 导演Director.场景Scene.布景层Layer.精灵Sprite的概念请移步: 导演控制场景,场景控制图层,图层控制精灵,精灵控制动作. 相互之间的关系框架 ...
- 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...
- 6、Cocos2dx 3.0游戏开发的基本概念找个小三场比赛
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...
- cocos基础教程(5)数据结构介绍之cocos2d::Value
1.概述 cocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vec ...
- cocos基础教程(5)数据结构介绍之cocos2d::Map<K,V>
1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value ...
- cocos基础教程(5)数据结构介绍之cocos2d::Vector
cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...
- 介绍一些实用的IOS手势识别库 (COCOS2D)
http://www.supersuraccoon-cocos2d.com/zh/2012/11/14/introduction-to-some-great-ios-gesture-recogniti ...
- A星寻路算法介绍
你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...
- 如何优化cocos2d程序的内存使用和程序大小
在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...
- Unity3D入门之Unity3D介绍以及编辑器的使用(1)
1.Unity3D介绍 Unity3D是跨平台(IOS.Android.Windows Phone.Windows.Flash.XBOX360.PS3.Wii等)游戏引擎,可以开发2D.2.5D.3D ...
随机推荐
- zencart产品详细页面调用数据库显示tags标签
给商品信息页面添加一些tag关键词标签有利于谷歌的收录,也有利于关键词的SEO,实现这个功能并不难.其实就是给zencart添加一个功能模块, 具体方法是: 1,在mudules目录下面新建一个以 ...
- Day05_JAVAEE系列:XML
XML概述 1)什么是xml? xml, eXtend Markup Language, 可扩展标记语言 2) html vs xml 都由w3c组织制定的. html语法特征:语法比较松散 ...
- JSP文件上传--Smartupload组件
把smartupload.jar copy到D:\apache-tomcat-7.0.57\lib下. 创建htm上传文件:smartupload_demo01.htm 由于是上传文件,需要对表单进行 ...
- TCP 连接中的TIME_WAIT
原文:http://blog.csdn.net/wangpengqi/article/details/17245349 这就有个细节,一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么 ...
- css一些特别效果设定
在CSS中,BOX的Padding属性的数值赋予顺序为 padding:10px; 四个内边距都是10pxpadding:5px 10px; 上下5px 左右10pxpadding:5px 10px ...
- error: QApplication: No such file or directory
尝试用Qt5编译Qt4的工程.你会遇到下面的问题: 错误:C1083: 无法打开包括文件:“QApplication”: No such file or directory 出现原因:Qt5里不再用Q ...
- ftok函数的使用
ftok函数的定义:系统建立IPC通讯 (消息队列.信号量和共享内存) 时必须指定一个ID值.通常情况下,该id值通过ftok函数得到. 头文件 #include <sys/types.h> ...
- N层架构实现的一个小例子
主要用到了[单例,抽象工厂,缓存,N层,反射]等知识.架构图如下: 解决方案用到的项目列表如下: 在接口项目中,定义一个IUER接口. namespace IDAL { public interfac ...
- MFC中的NMHDR结构体和NMUPDOWN结构体
建立spin控件,创建UDN_DELTAPOS一个消息函数后: void CSpinDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) { NM ...
- js中原生对象、内置对象和宿主对象(转)
本帖最后由 无解. 于 2012-9-9 12:13 编辑 <ignore_js_op> 这个图来自于<JavaScript语言精髓与编程实践>第三章P184页.最近在改第二版 ...