总体来说,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介绍的更多相关文章

  1. cocos2d基本类介绍 director/scene/layer/sprite

    [核心类]     导演Director.场景Scene.布景层Layer.精灵Sprite的概念请移步:     导演控制场景,场景控制图层,图层控制精灵,精灵控制动作.     相互之间的关系框架 ...

  2. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  3. 6、Cocos2dx 3.0游戏开发的基本概念找个小三场比赛

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  4. cocos基础教程(5)数据结构介绍之cocos2d::Value

    1.概述 cocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vec ...

  5. cocos基础教程(5)数据结构介绍之cocos2d::Map<K,V>

    1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value ...

  6. cocos基础教程(5)数据结构介绍之cocos2d::Vector

    cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...

  7. 介绍一些实用的IOS手势识别库 (COCOS2D)

    http://www.supersuraccoon-cocos2d.com/zh/2012/11/14/introduction-to-some-great-ios-gesture-recogniti ...

  8. A星寻路算法介绍

    你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...

  9. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  10. Unity3D入门之Unity3D介绍以及编辑器的使用(1)

    1.Unity3D介绍 Unity3D是跨平台(IOS.Android.Windows Phone.Windows.Flash.XBOX360.PS3.Wii等)游戏引擎,可以开发2D.2.5D.3D ...

随机推荐

  1. Python基础学习1---函数

    Python函数篇 函数是重用的程序选, 他们允许给一块语句一个名称,然后可以在你的程序的任何地方是使用这个名称任意多次地运行这个语句块.这个就被称为 调用  函数.比如内建了很多高效的函数 如len ...

  2. zencart产品详细页面调用数据库显示tags标签

      给商品信息页面添加一些tag关键词标签有利于谷歌的收录,也有利于关键词的SEO,实现这个功能并不难.其实就是给zencart添加一个功能模块, 具体方法是: 1,在mudules目录下面新建一个以 ...

  3. 一个web项目在myeclipse中add deployment时无法被识别出来的原因

    当我们一个web项目,在myeclipse中,add deployment时,可能发现,根本无法被识别成web项目,可能的原因有:   1. 项目的properties ->Myeclipse ...

  4. 剑指offer 判断树是不是对称的

    html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...

  5. leveldb性能分析

    Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计.特别是LSM算法. 那 ...

  6. jvisualvm

    f the fonts used by VisualVM are hard to read, switching the LaF might help.  Try for example  'visu ...

  7. 适用于kali linux的远程桌面开启方法(从windows xp 远程登录到kali linux )

    为了解决Windows远程桌面访问Ubuntu 12.04 之一 中提到的VNC远程桌面的缺点(见http://www.linuxidc.com/Linux/2012-07/64801.htm),我们 ...

  8. MC34063中文资料及应用实例(转)

    源:http://blog.chinaunix.net/uid-26199686-id-3207838.html MC34063A(MC33063)芯片器件简介 该器件本身包含了DC/DC变换器所需要 ...

  9. 用c++写一个 “hello,world” 的 FastCGI程序

    原文:http://chriswu.me/blog/writing-hello-world-in-fcgi-with-c-plus-plus/ 上面的连接地址给出的是作者的原文地址. 另外一个作者稍微 ...

  10. SQL复习六(视图)

    视图是关系数据库系统提供给用户以多角度观察数据库中数据的一种重要方法.视图是从一个或者几个表中导出的虚拟表.视图一经定义就可以被查询和删除.也可以在视图上定义视图.用视图完成数据的更新(增,删,改)操 ...