(未完成)

cocos2d-x并不是一个适合网游客户端(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的提示,但是依然不够方便,因为这些弹出框都很卡很慢。接触过mmo客户端开发的应该都有体会资源不存在是经常发生的事情,尤其是大家一起开发功能的时候,资源总是最后才正确且完整。  这个时候记录个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思路非常简单,生成字形的时候一个文字一个文字的进行生成,把生成的字形保存到一个512*512的纹理上,然后渲染的时候取这个生成好的字形进行绘制。

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

优化进行中。。。。。。。

最后再牢骚下,我敢打赌cocos2d-x的js脚本支持并不是一个正确的选择,如果是吸引html的开发者,我勉强认同cocos2d-html5,但是说实话,用html来开发网页游戏在几年内都不会是一个正确选择。而cocos2d-html5更像是给html开发人员的玩具,并且悲剧的是这个玩具还有些难,大多数html开发者无法掌握这个玩具,只能用它写写斗地主之类的小游戏。有能力用它写出捕鱼达人的开发者要么是顶尖的html开发者,要么会像我一样更习惯用c++来写代码。

正确的跨网页平台方向应该是像c3或者是unity3d一样,内部使用llvm把c++代码直接编译成flash或html5代码,这样现有的游戏只要经过非常简单的移植就可以在网页上面跑了。像unity3d那样支持js固然不错,但是这个不是必须的,我如果用unity3d,我选择脚本语言会是c#而不会是js,相信很多游戏开发者都会做出这样的选择。所以cocos2d-x费了那么大力气搞js,完全是走弯路了。有这个时间还不如把发布做好,把c#支持加进来(不加也无所谓,lua也凑合,就比c#慢几倍而已)。如果cocos2d-x不能在mmo相关功能上提供更多的支持的话,那么它对我而言就是一个玩具,而不是一个强力武器。

Cocos2d-x 之大牛看法相关推荐

  1. Cocos2d-x 之大牛看法佐证

    为什么华尔街认为触控科技游戏引擎的价值是零 5月21日晚间,触控科技CEO陈昊芝的内部邮件称,因公司的估值只有5.4亿美元严重低于预期决定暂缓上市.按照邮件中披露的华尔街对触控科技估值的算法,触控科技 ...

  2. [转载][转帖]谈谈我对攻读计算机研究生的看法。。。大牛的文章,见解精深独到...

    原文地址:[转帖]谈谈我对攻读计算机研究生的看法...大牛的文章,见解精深独到作者:新一 谈谈我对攻读计算机研究生的看法...大牛的文章,见解精深独到           <转帖> 就我自 ...

  3. cocos2d 很水很水的看法

    这几天接了个扯淡的项目 cocos2d的 . 本来以为是Cpp的, 结果不是2dx ,而是OC的2d.看了几天的官方的dome ,大概知道是什么样子的.我就简单的纪录一下好了: cocos2d的整个框 ...

  4. python大牛分享一些对python的看法

    其实python非常适合初学者入门,相比较其他不少主流编程语言,有更好的可读性,因此上手相对容易,自带的各种模块加上丰富的第三方模块,免去了很多重复造轮子的工作,可以更快地写出东西.配置开发环境也不是 ...

  5. 前端怎么学,如何从小白变成大牛,一篇文章实现你对前端的看法

    个人名言:  没有一个人生下来就是天才,只是别人付出的汗水比你多了罢了,相信只要自己努力,就没有做不到的东西包括学习编程,你我都是黑马 一.什么是前端及前端的介绍 前端开发是创建WEB页面或APP等前 ...

  6. 业内大牛送给计算机方向学生的7个实用建议!

    来源:CSDN 本文约4000字,建议阅读8分钟. 本文为你整理了行业内大牛为计算机专业学子提出的7个建议. [导 读]由于Joel Spolsky的双重身份(昔日耶鲁大学计算机系学长,今日Fog C ...

  7. 为什么科技互联网公司越来越重视数学?贾扬清等大牛如是说

    机器之心编辑部 最近,第二届「阿里巴巴全球数学竞赛」正在紧锣密鼓地开展,仅预选赛题目的公布就引来了大量围观.这种数学竞赛的举办似乎透露出一个信号:科技互联网公司越来越重视数学了.为什么会出现这种现象? ...

  8. Quora上的大牛们最喜欢哪种机器学习算法?

    https://www.toutiao.com/a6668944982784606723/ 机器学习算法那么多,一个问题的解决往往可能有好多算法的选择. 这些算法有什么特点呢?特定的场景需要选择哪一算 ...

  9. 干货丨11位机器学习大牛最爱算法全解

    1 来源:Quora 译者:朱焕 [导读]"你最喜欢的机器学习算法是什么?"这个问题有些像"你最喜欢的颜色是什么?"说不重要吧,细究起来,颇有深意.本文摘选一些 ...

最新文章

  1. 只需一行代码,你的纯文本秒变Markdown
  2. 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)
  3. (转)C# Delegate.Invoke、Delegate.BeginInvoke
  4. POJ 1320 Street Numbers 解佩尔方程
  5. 1024华为HDC值得拥有
  6. 第三次学JAVA再学不好就吃翔(part110)--使用指定的码表读写字符
  7. HttpNotificationChannel 云端推送信息实现
  8. swiper4.0(移动端)轮播图 - 案例篇
  9. 今天我们谈一下HTML标签中的map标签的用法和使用场景
  10. PHP数据库扩展 - PDO操作
  11. 解放双手,CSDN博客支持公众号自动同步!
  12. Visual Studio vs软件下载 vax Visual Assist X VAssistX
  13. SAM-BA连接不上
  14. linux引导程序下载,SysLinux 4.05 下载 功能强大的引导加载程序
  15. Matlab2019b中配置最小均方误差滤波器(dsp.LMSFilter)详细设置
  16. blender布尔运算差值看不出效果/blender布尔差值无效
  17. pcie转m2装系统win10_m.2固态硬盘怎么装win10教程|m.2固态硬盘装win10教程步骤
  18. 流式数据架构理论 ◆ 基本概念
  19. ps aux mysql_ps -aux的错误用法
  20. 最新各大CMS采集资源站解析网址合集

热门文章

  1. IOT大数据大世界大未来,物联网产业大数据应用简析
  2. AndroidStudio删除无用资源
  3. luogu P2345 奶牛集会
  4. SPOT-5卫星数据介绍
  5. python 语音朗读软件下载_使用python编写一个语音朗读闹钟功能的示例代码
  6. 洛谷[P1157 组合的输出] {暴力枚举} 奋斗的珂珂~
  7. 【专业知识问答】问:发电机转子绕组匝间短路的危害、起因、处理要求和预防措施各是什么?
  8. 水处理仪器仪表用R型变压器的特点?
  9. 2021年上半年软考网络规划师真题解析
  10. 计算机和机器人专业哪个好初中生,成都初中生参加这些竞赛,不管是直升还是签约,拿了奖项都备受重视!...