Cocos2d-x 之大牛看法
(未完毕)
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 之大牛看法的更多相关文章
- 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...
- 大牛对ACM入门菜鸟的一些话
首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门.其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发现我有很多的东西要学的时候,我实 ...
- Cocos2D创建多彩文本显示标签
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Cocos2D中默认的CCLableTTF类从源代码里看是支持 ...
- Ember.js 看法,精辟
https://ruby-china.org/topics/31451#reply43 都是大牛,或许还是vue适合小白!架不住人多啊!一个非常优秀的产品,客户百十号人,如何发展! 46楼的感想如下, ...
- 操盘策略:KDJ三线合一 必定孕育大牛股
日周月KDJ指标三周期合一是孕育大牛股的必要条件: 炒股看一下周.月线十分有必要,很多时候,周.月线已经死叉下行,中长线趋势走坏,但日线偏偏发出金叉,K线也走好,量价配合也好,而此时介入,多数情况下就 ...
- 【Cocos2D研究院之游戏开发】
http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Co ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- 关于js的回调函数的一点看法
算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做nativ ...
随机推荐
- [JLOI2011]飞行路线(分层图)
[JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n 个城市设有业务,设这些城市分别标记为 0 到 n−1 ,一共有 m ...
- 【Uva 11400】Lighting System Design
[Link]: [Description] 你要构建一个供电系统; 给你n种灯泡来构建这么一个系统; 每种灯泡有4个参数 1.灯泡的工作电压 2.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的 ...
- Java基础学习总结(17)——线程
一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe ...
- COGS——T1310. [HAOI2006]聪明的猴子
http://cogs.pro/cogs/problem/problem.php?pid=1310 ★ 输入文件:monkey.in 输出文件:monkey.out 简单对比时间限制:1 ...
- 3D打印技术之切片引擎(6)
[此系列文章基于熔融沉积( fused depostion modeling, FDM )成形工艺] 这一篇文章说一下填充算法中的网格填充.网格填充在现有的较为成熟的引擎中是非常普遍的:skeinfo ...
- 关于Android手机MTP模式连接的一些设置(win7和ubuntu下,以红米1s为例)
有些手机的MTP模式在电脑上识别不了,须要一些设置才干够,以下就网上收集来的一些设置方法集中贴过来: 一. win7下 參考:http://blog.ammrli.com/?p=1117 1.在设备管 ...
- 怎样使用纯CSS3创建一个简单的五角星图形
我们能够使用SVG.Canvas.CSS3或者背景图片来实现五角星图案及其悬停效果. CSS3引入的伪元素和变换特性使得实现五角星图形很easy,而且能够结合渐变实现更为美丽的效果.因此使用图片实现五 ...
- oracle之ROWNUM的查询应用
1 在ORACLE数据库中,ROWNUM是ORACLE数据库为查询结果加入的一个伪列.起始值为1.经常使用来处理查询结果的分页. 2 因为ROWNUM的特殊性,使用时候一般是分三层: 第一层:先进行查 ...
- 实现图片懒加载(lazyload)
对页面加载速度影响最大的就是图片,一张普通的图片可以达到几M的大小,而代码也许就只有几十KB.当页面图片很多时,页面的加载速度缓慢,几S钟内页面没有加载完成,也许会失去很多的用户. 所以,对于图片过多 ...
- android对话框显示异常报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.
今天写android实验碰到到一个问题,在用AlertDialog.Builder类构建一个对话框之后,调用Builder.show()方法时抛出异常如下: - ::-/xyz.qlrr.sqlite ...