总体来说,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基础学习6---存储器

    Python提供一个标准的模块,称为 pickle .使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来.这被称为 持久地 储存对象.还有另一个模块称为 cPickle ...

  2. elasticearch 安装

    1.elasticsearch需要安装jdk1.7以上 2.在ubuntu下不能以root运行,需要建立专门账号 添加组 root@ubuntu:~/Downloads/elasticsearch-/ ...

  3. hdu_3564_Another LIS(线段树+LIS)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3564 题意:给你N个数的位置.数i的位置为第i个数,比如 0 0 2,表示1插在第0个位置,此时数列为 ...

  4. Android Studio的使用(六)

    本篇博文介绍如何更新Android Studio. 1.导航栏的Help下拉框可以找到更新的按钮. 2.接下来点击Update and Restart即可 3.有些人说网连不上,但我的就可以,不行的话 ...

  5. jquery选中checkbox多选项并添加到文本框中

    <script> function check(){ var dd = ""; if($("input[type='checkbox'][name='moke ...

  6. dedecms 的这个dede:arclist里怎么调用全局变量?

    将{dede:global.cfg_templets_skin/} 写为 [field:global.cfg_templets_skin/] 即可.

  7. Sybase数据库的分页功能

    项目中需要用到Sybase数据库的分页功能,想尽各种办法都没有成功,最后用如下的存储过程成功实现功能,记录备忘. ),@start int, @pageSize int as begin declar ...

  8. Java ZIP压缩和解压缩文件并兼容linux

    JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的 ...

  9. dom元素循环绑定事件的技巧

    以前总觉得自己写的代码不太规范,尤其是写原生的时候.举个例子: 要为页面上所有".a"的元素绑定事件,当然了用jquery很方便:$('.a').bind("click& ...

  10. js 复制内容到剪切板

    function oCopy(objname){//只兼容IE var obj = $(objname); obj.select(); js=obj.createTextRange(); js.exe ...