(未完毕)

cocos2d-x并非一个适合网游client(mmo)的游戏引擎。越是大型游戏,这个小引擎就越无法驾驭(尽管它很受欢迎)。 之前我在原来的公司使用的是自主研发的C3引擎,已经对外开放(尚未开源),后面假设我有提到c3引擎。那么指的就是这个2.5d游戏引擎。

我想起我上个月刚离职的时候。c3的首席研究员(应该也是引擎圈内的一个大牛)对我说cocos2d-x没有什么技术含量,我还不以为然,当时我想的是,假设我自己开发一个游戏,首选必定是cocos2d-x。

可是真正到新的公司接触了使用cocos2d-x开发的一个类似神仙道的mmo才感觉cocos2d-x对于一个mmo引擎来说。差的非常多。与c3相比。差就差在几年。十余款mmo。上千位开发人员的检验。

尽管cocos2d-x的开发社区非常庞大,可是它适合刚開始学习的人去开发一个愤慨的小鸟、水果忍者,并不适合一个网游公司去开发一个mmo。尽管基于cocos2d-x有非常多不错的mmo,比方忘仙、神仙道。

可是我觉得那是一群牛x的开发人员通过自己的努力弥补了cocos2d-x的不足。

能够觉得我不是一个牛人,可是一个团队能有一个牛人就已经万幸了,能有两个就可遇而不可求了。一个好的游戏引擎比方c3正是被我们这些普通开发人员来使用,它能够不次时代。能够不面向对象,可是它会很易于使用,而且很难被误用。

牢骚发完了,以下是详细的优化:

1、去掉libxml2,改用rapidxml来解析xml文件。

rapidxml简直是一个大杀器。解析xml的速度甚至比纯文本解析和json格式还要快。其解析速度比libxml2快5倍,即便cocos2d-x中使用的是sax模型,而rapidxml是dom模型,使用rapidxml依旧要快许多。我们的游戏是全部配置文件都用xml来描写叙述,事实上大可不必,可是为了跟网页版本号配置统一。方便今后的维护,临时没有对配置格式进行改动。

而cocos2d-x底层对xml使用最频繁的地方就是Plist文件的解析了。

ios平台下还好,NSDictionary速度也很快(可是依旧比rapidxml慢一倍)。可是android下效果就很明显了。游戏启动时间大大缩短。
所以,为什么cocos2d-x还要用libxml2呢?

2、游戏资源打包。  这个尽管是能够自己扩展的。可是却是须要引擎提供支持的。由于全部的图片读取都是属于引擎的内部代码。  当然不是全部的游戏都须要资源打包。可是一个有用(mmo向)的游戏引擎这个是必定要考虑的。 这一块儿牵扯到非常多东西,比方游戏资源更新,资源读取规则。读取失败后的异常处理。多线程载入时的同步机制等等。

3、改动CCAssert,添加日志记录功能。   作为一个游戏引擎。cocos2d-x内部代码非常不健壮,非常多资源不存在或者是不小心的误用都会让程序挂掉。 这个对一个mmo来说是不可接受的。 CCAssert原来是一个简单的assert,这个在ios和android下就直接挂掉了,后面尽管改动为CCMessageBox的提示。可是依旧不够方便,由于这些弹出框都非常卡非常慢。接触过mmoclient开发的应该都有体会资源不存在是常常发生的事情,尤其是大家一起开发功能的时候,资源总是最后才正确且完整。  这个时候记录个log不就完了。

而cocos2d-x却并没有提供不论什么Log记录功能(实际文件Log而不是开发时用的CCLog)。
而引擎内部有大量的Assert,断定文件一定是存在的。断定某个配置一定是正确的,断定某个Frame一定是存在的,这个造成的问题就是一旦有配置错误,那么程序非常可能就崩溃掉了。而作为一个mmo,尤其是已经对外公布的情况下。这个时候出现表现异常(比方图片不显示)而不是崩溃会更加合理。

4、资源异步载入。尽管cocos2d-x有提供Texture的资源异步载入,可是这并不够用。 我们改动为这种形式。CCSpriteCache缓存图片的时候异步载入图片。这个时候能够获取到正确的CCSprite,仅仅只是里面的CCTexture并没有附上一个正确的纹理id,当图片载入完成,这个id就正确了,那么CCSprite在下一次Draw的时候自然就会渲染出正确的图片(这里要做下推断。假设纹理id不对那么就不进行渲染操作)。    还有须要注意的就是仅仅有一个线程载入图片是不够用的,依据须要可能要开3~5个线程来载入图片,才会起到异步载入图片的最佳体验。
  当然,假设不过怕载入图片卡主主线程而不关心载入速度,那么就不须要这么麻烦了。

5、加入一个高速渲染的CCFont,不管是哪个平台生成字形纹理的过程都是很慢的。假设一个mmo中有大量的文本、聊天等等。光生成字形的时间可能就要500~600ms,那这个游戏给人的感觉就是时不时一卡一卡的。 这个新的CCFont思路很easy,生成字形的时候一个文字一个文字的进行生成,把生成的字形保存到一个512*512的纹理上。然后渲染的时候取这个生成好的字形进行绘制。

6、计划中: 人物图片使用骨骼动画切片处理,这个事实上应该比什么js脚本更应该加到引擎内部。这个要提供的不不过代码的支持,这个是从生产到结果的一站式技术支持。  不能引导生产流程的引擎不能说是游戏引擎。不能成为生产线的游戏引擎不能说是游戏引擎。

优化进行中。

。。。。

最后再牢骚下,我敢打赌cocos2d-x的js脚本支持并非一个正确的选择,假设是吸引html的开发人员,我勉强认同cocos2d-html5,可是说实话,用html来开发网页游戏在几年内都不会是一个正确选择。而cocos2d-html5更像是给html开发人员的玩具,而且悲剧的是这个玩具还有些难,大多数html开发人员无法掌握这个玩具,仅仅能用它写写斗地主之类的小游戏。

有能力用它写出捕鱼达人的开发人员要么是顶尖的html开发人员,要么会像我一样更习惯用c++来写代码。

正确的跨网页平台方向应该是像c3或者是unity3d一样,内部使用llvm把c++代码直接编译成flash或html5代码。这样现有的游戏仅仅要经过非常easy的移植就能够在网页上面跑了。像unity3d那样支持js固然不错,可是这个不是必须的。我假设用unity3d。我选择脚本语言会是c#而不会是js,相信非常多游戏开发人员都会做出这种选择。所以cocos2d-x费了那么大力气搞js。全然是走弯路了。

有这个时间还不如把公布做好,把c#支持加进来(不加也无所谓,lua也凑合。就比c#慢几倍而已)。假设cocos2d-x不能在mmo相关功能上提供很多其它的支持的话,那么它对我而言就是一个玩具,而不是一个强力武器。


Cocos2d-x 之大牛看法的更多相关文章

  1. 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)

    转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...

  2. 大牛对ACM入门菜鸟的一些话

    首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门.其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发现我有很多的东西要学的时候,我实 ...

  3. Cocos2D创建多彩文本显示标签

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Cocos2D中默认的CCLableTTF类从源代码里看是支持 ...

  4. Ember.js 看法,精辟

    https://ruby-china.org/topics/31451#reply43 都是大牛,或许还是vue适合小白!架不住人多啊!一个非常优秀的产品,客户百十号人,如何发展! 46楼的感想如下, ...

  5. 操盘策略:KDJ三线合一 必定孕育大牛股

    日周月KDJ指标三周期合一是孕育大牛股的必要条件: 炒股看一下周.月线十分有必要,很多时候,周.月线已经死叉下行,中长线趋势走坏,但日线偏偏发出金叉,K线也走好,量价配合也好,而此时介入,多数情况下就 ...

  6. 【Cocos2D研究院之游戏开发】

    http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发]   201211-19 Co ...

  7. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  8. 一位资深程序员大牛给予Java初学者的学习路线建议

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...

  9. 关于js的回调函数的一点看法

    算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做nativ ...

随机推荐

  1. clear---清除当前屏幕

    clear命令用于清除当前屏幕终端上的任何信息.

  2. EXPIREAT

    EXPIREAT key timestamp EXPIREAT 的作用和EXPIRE类似,都用于为key设置生存时间. 不同在于EXPIREAT命令接受都时间参数是UNIX时间戳(unix times ...

  3. 洛谷 P1096 Hanoi双塔问题

    P1096 Hanoi双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情 ...

  4. [Poi] Build and Analyze Your JavaScript Bundles with Poi

    Ever wonder where those extra KB in your bundle are coming from? This lesson walks you through runni ...

  5. poj 2240 Bellman-Flod 求环

    http://poj.org/problem?id=2240 深刻体现了自己代码能力有问题外加改模板能力有问题.外加Debug有问题.以后做到: 1.算法原理能够轻易弄出来. 2.代码模板自己收集各种 ...

  6. Lesson 1 Basic Concepts: Part 3

    A cheaper option Some people may not want to buy a domain or pay for hosting because they only have ...

  7. 二分法查找 js 算法

    二分法查找算法:采用二分法查找时,数据需是排好序的.主要思想是:(设查找的数组区间为array[s, e])(1)确定该区间的中间位置m(2)将查找的值T与array[m]比较,若相等,查找成功返回此 ...

  8. Ubuntu系统下的多路径软件 DM Multipath 配置。

    Ubuntu系统下的多路径软件是操作系统自带的 DM Multipath工具.------------------------------------------------------------- ...

  9. BZOJ3105: [cqoi2013]新Nim游戏(Xor线性无关组)

    Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴 ...

  10. Mysql学习总结(2)——Mysql超详细Window安装教程

    目录 一.安装包准备 二.开始安装 三.验证安装 四.客户端工具 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ 下载如下教程,这时要选MySql On Wind ...