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 ...
随机推荐
- HDU 5723 Abandoned country
题目说每条边权值都不一样,说明最小生成树是唯一的,不存在最小期望这一说. 然后就是先求出最小生成树,随便确定一个根节点,计算出每个点的子树有多少节点,记为c[x]. 指向x的这条边被统计的次数为c[x ...
- HDU 4685 Prince and Princess
强连通分量,看大神的题解才会写的.... http://www.cnblogs.com/kuangbin/p/3261157.html 数据量有点大,第一次Submit 2995ms过的,时限3000 ...
- Android Studio 提示Error running app: No Android facet found for app
错误解决办法如下: 可以通过以下几个步骤解决该问题: 1) 点击菜单File -> 选择Project Structure, 或使用快捷键 (Ctrl+Alt+Shift+S) 打开”Proje ...
- JSP标准标签库(JSTL)--SQL标签库 sql
了解即可.SQL标签库 No. 功能分类 标签名称 描述 1 数据源标签 <sql:setDataSource> 设置要使用的数据源名称 2 数据库操作标签 <sql:query&g ...
- ntfs mount fail after upgrade win10
http://www.cnblogs.com/wangbo2008/p/3782730.html linux下挂载NTFS分区错误修复 今天在linux下打开win的NTFS硬盘总是提示出错了,而 ...
- 转 OGG add trandata 到底做了什么
有的时候我们做OGG的时候add trandata会出现异常. 这里就剖析一下add trandata到底做了什么 GGSCI (yjfora81 as ggs_admin@testdb) 2> ...
- angula组件-通过键盘实现多选(原创)
在刚刚结束的angular交易系统项目中有几个需求是让我感觉要花点时间的 如何更优雅的使用angular-bootstrap 的 Modal框. 通过键盘实现ctrl多选,shfit批量选的功能. 如 ...
- ida dump内存脚本
auto i,fp; fp = fopen("d:\\dump.dex","wb"); for(i=r0;i<r0+0x20;i++) fputc(Byt ...
- GDB + gdbserver 远程调试android native code
原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...
- hadoop2.2 datanode 启动不了
FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block po ...