使用creator制作的ios游戏已经上架一年 来分享下感受,也介绍一下自己的游戏

这是一个重制版的项目。为啥叫重制版呢,因为早在2014年的时候已经在AppStore上架了早期的版本,早期的版本使用的是cocos2d-x 2.3版本开发的。2017年初的时候我看到了cocos reator的介绍,十分心动,决定重新使用cocos creator重新制作一个版本。

至于为什么重新制作一个版本,这里还是多说一下。因为我的团队在2014年的时候解散了(没赚到钱),游戏停止维护2年多了。项目是个很小的塔防游戏项目,但这是我们当年真正认真做的一个项目(团队组成:全部都是新手),虽然如今团队成员各奔东西,但我本人对于这个项目还是有感情的。时隔两年多,兜兜转转,当我初步了解了cocos creator后(当时有官方的每周二直播视频,很可惜后来停播了),发现养团队不行,但我可以自己把这个项目重新维护起来。对于个人来说,最大的成本就是时间和家庭负担了。于是不是程序员的我就着手开始了项目的制作(不知当时哪来的勇气,呵呵呵)。

一路摸爬滚打。断断续续地边学边做。花了半年多的时间。将项目按照旧版本的样子使用creator重新做了一遍。终于在2017年12月重新上线了。

虽然未参与旧版本的编码,但是对于整个游戏的制作,从策划、数值、骨骼动画制作、测试、配置都是深度参与其中的。所以新版本开始制作时,除了美术原画和写代码,其他的基础知识还是有一点储备。

分享一下制作过程中的一些感受吧。

一、cocos creator相较于cocos2d-x,入门门槛已经降地非常低。

降低门槛主要体现在:

1、JavaScript语言

对于我这样的非科班出身的学习者来说,脚本语言是十分友好的。少了各种限制,可以拿起键盘就干。虽然以后要补很多课,但毕竟迈出第一步容易很多了。

2、可视化编辑器

这个不多说了,想起当年使用cocos2d-x时靠脑补来配置UI的场景,现在还脑仁疼。而且cocos creator做到了免编译,我不知道引擎组实现这个有多困难,但对开发者来说是极大的便利。

3、组件化的设计模式

对于菜鸟程序员想要做游戏的,个人觉得这个模式很容易理解和使用。不需要在游戏架构上设计的很完善(想要像我这样的入门菜鸟理解编程的一些精髓是需要很多时间的,但不需要理解那么多的情况下也能做出稍微复杂的游戏,我觉得暂时就够了),像U盘一样,即插即用,修改替换也十分方便。

二、入门简单,但如果要做稍微复杂的点游戏仍然需要学习很多技能。

1、使用引擎集成的第三方功能

(1) Dragonbones、Spine 制作骨骼动画

必须吐槽下,我使用的是Dragonbones。一路用来各种bug不断。creator各个版本出的bug还不同。特别是动态加载骨骼的时候,有的是事件监听失效,有的是莫名其妙地奔溃。

基于creator1.9.3版本,目前项目中只有简单的、且不需要事件监听和实例化的地方(图鉴)才使用Dragonbones,其他复杂和频繁替换的应用场景(战斗场景的敌人、塔、特效)都做成了帧动画。但因为骨骼动画也自己做,骨骼动画手动导出做成帧动画,工作量增大巨多。所以还是很希望能够happy地直接使用骨骼动画。

2、拓展功能

除了AnySDK外好像还有个SDKBox,集成了很多这方面的功能平台。使用过了后,还是有些坑,而且自己的项目只发ios平台,最后还是选择自己集成(因为项目目前只发ios平台,于是又学了objective-c的语法),花点时间学习,集成到项目中不会很困难,都是基础的语法和概念的使用。

(1)内购(钱)

如果没有广告,那这是必须有的。

(2)广告(钱)

如果没有内购,那这个应该也算必须有的。
因为没了解国内的广告平台,就使用了旧项目使用过的admob。但填充率感人。

三、不可避免的,引擎还存在一些不足的地方。

主要针对1.X版本。2.X版本使用不多,没有发言权。

经历了creator版本升级、改bug、升级、改bug、升级、bug改不了且性能堪忧、降级等一些列眼花缭乱的操作之后,将版本creator稳定在1.9.3。

暂时还没有勇气在这个项目上尝试升级到2.X版本。但最新的2.0.7 alpha6版本似乎已经做了很多优化,下个native新项目打算使用2.0(看到jare大大目前不建议2D游戏使用2.1,墙裂希望官方把2.1的纹理压缩也集成到2.0 版本,虽然貌似可以通过定制构建流程,再使用TextruePacke命令行来自动化,但不懂啊,有没有大神能提供这方面比较详细的资料,万分感激)。

1、Native性能问题

与cocos2d-x相比性能下降了几个量级。有玩家问我为啥当年旧版本的游戏使用iphone4s都跑地很溜,如今新版本使用iphone7还会卡。

可能因为Mac与iphone相比,性能好很多。Mac上使用Chrome调试游戏时,如丝顺滑,丝毫没有注意到性能问题。结果开发后期连接真机测试就悲剧了。为啥在开发期间不做一些真机测试,因为懒呗。还有是因为当时还不了解Xcode连接真机测试的流程,连IOS开发者账号都没(后来才知道可以无证书调试)。有些在专业开发者面前可能是可笑愚蠢和极度业余的做法,但对于新人独立开发来说却往往是真真实实会撞上的墙。

我想因为开发语言的问题导致的性能下降,应该暂时无解(不知在下理解是否不对)。于是只能从其他方面进行有限的优化。对象池、压缩纹理、内存及时手动回收、游戏逻辑优化、等引擎组升级引擎优化

自己项目的瓶颈

连接XCode测试,发现我的项目卡顿主要还是在CPU运算达到100%了。最早以为是骨骼动画的大量计算造成,后来把骨骼动画全部换成了帧动画,并在保证动画流畅性的情况下严格限制了帧的数量,但问题并没有很好的改善。

这部分应该是需要去学习Xcode的调试技巧或Chrome的调试技巧,来分析CPU的瓶颈,暂时我还没有系统地学习,所以还没解决这个问题。不能让引擎背锅,但还是希望引擎在native上的性能能有所提高。这对于开发大中型native游戏来说,应该算迫切需求了。

2、内存管理

对于专业的程序员来说,可能可以很好地管理内存使用,但对于我这种半路出家(基本功不扎实),内存管理不够友好。虽然panda大大写了很详细的文档来解释,但因为我的项目的内存在使用了压缩纹理后已经不会因为内存不够而崩掉,暂时没有深入研究(感谢colin大大提供的压缩纹理教程)。但目前项目在自动回收垃圾的时候,时不时还是会造成游戏的卡顿。

总结:

2018年即将过去。Cocos Creator在不断迭代新版本。

我的游戏上架后也更新了1年,游戏项目基本稳定。

从cocos creator 1.4一直使用到1.9.3。跨过一些坑,还有很多坑待解决。

马上到来的2019,祝愿不论在路上或即将上路,还是准备走其他路的开发者小伙伴们和cocos引擎都有所突破。

最后的最后,厚脸皮地将自己的游戏发出来。欢迎提建议和反馈bug。
https://itunes.apple.com/cn/app/塔防江湖2重制版/id1318274235?mt=8

6赞

厉害。。。

人工点赞

负责任的说,Creator 2.x 改动很大,但是我们项目组毅然决然的从 1.10.1 升级了,用了一周的时间填了版本差异,2.0.4 用了一个多月了吧,这周升级的 2.0.6,期待 2.0.7

不知道楼主低端机性能问题是否解决了。遇到同样的问题,目前项目版本1.8.2,项目主要的瓶颈问题是native的性能问题。前期开发速度提升了一倍不止,后期维护优化却比cocos2dx难上很多狠多。由于我们的用户有一些低端机型。iphone5s,华为千元机等。卡顿,特别是切换场景的速度,遇到了很大的瓶颈问题。不敢贸然升级引擎,因为需要整包更新,整包更新对用户体验很差。只能去一点一点节省开支,来规避这些性能问题。很多东西从开始写到上线,重构了很多次。到后面,节点prefab,能复用的全部复用。把消耗降到最低。这样的代价就是,代码的逻辑写的特别复杂。要不停的重置prefab。不断的复用之前的东西。也很容易出很多bug。所以也在修复bug这个路上走的越来越久。主要原因还是对creator以及js的不熟悉。楼主说开发难度降低,但我看来,creator的开发难度要比cocos2dx高很多,如果要把项目做到精致,解决性能问题的话。真的挺难的。因为本身原生性能比cocos2dx差很多。优化就要比cocos2dx花费更多的精力。所以下个项目还要不要继续用creator呢。

之前有升级到2.0版本,后来遇到native性能和bug多的问题,就回退了。项目要一直维护的话,肯定是要升级引擎的。但我会先用2.0开发新的项目,如果稳定,就再考虑升级旧项目。

低端的性能没有解决。

跟你们一样,也是每次更新的时候优化一点点。个人认为低端机属体验不够好的问题,既然目前鱼和熊掌不能都得,何必过分纠结,主流机型上体验过的去就可以了,按现在手机硬件的发展速度,低端机淘汰的速度应该不会太慢。

我的是单机游戏,我就没有使用热更新,从来都是整包更新。

我没有去了解热更新的技术,而且creator1.x和2.x版本热更新好像不能兼容。

复用prefab和使用对象池的话,会让逻辑复杂些。

我遇到的主要还是在复用时的重置和初始化逻辑。认真理一下逻辑,应该能解决大部分因为复用导致的问题,但确实会比较耗精力。
如果是因为对js不了解的原因导致的bug,那其实可以使用TypeScript替代js增强类型检查或者更简单点–稍微深入学习下JavaScript。不是要追求代码的优雅性的话,个人觉得需要用到js高级特性的地方其实不多。因为我是半路出家的写程序,感觉来来回回差不多都是使用那三板斧,这个项目中甚至自己几乎都没用到类的继承:13:(难道我一直都不是在面向对象编程:9:)。

开发门槛个人觉得却实是降低了很多,开发难度的话,这个因人和项目而异吧

性能问题,这个我也没解决,能力有限,还得依赖引擎组的大大们想办法。
使用cocos2d-x的开发太慢。而且随着手机性能的一直提高和引擎的迭代升级,性能问题终究会是过去式。所以个人开发者和小团队,肯定是要拥抱cocos creator的。
因为我是自己一条龙制作,而且并非全职做,所以分配给写代码的时间并没有特别多,有个想法就做上去看看,使用creator的话,单单编译都会节省非常多的时间。所以下个项目还会是使用creator。

以上是俺的一些看法

2赞

厉害。。。

插播一个升级到 2.0.7 的理由

3赞

老哥赶紧的,2.1.0下不去了,快上2.1.1合并一下这个版本的内容

感谢楼主的长篇经验分享,非常感谢!
我刚才公司群里说,和 Cocos Studio 时代相比,恍若隔世。以前是只有骂的,从未听过有表扬和支持的声音。

目前 Creator 对比于 cocos2d-x 的原生性能降低,有几个方面的原因:

  • 很大一部分是来自于 jsvm 本身就是比 lua c++ 慢很多
  • 另一方面来自于 entity-component 结构的消耗
  • 还有来源于 creator 1.x 里面强行耦合 creator 的逻辑树和 cocos2d-x 节点树。这块已经在 creator 2.0 里面解决掉了。

Creator 2.0 里面的一些优化点,可以看下 Panda 的PPT:

这张图说的是 Creator 1.x 时代 sgNode 的额外开销,强行对接了 Creator 逻辑树到 Cocos2d-x上面

这两张说的是渲染流程上的改进,减少逻辑分支的计算开销。

当然还有 Panda 很引以为豪的零垃圾回收设计等等,都不同程度地提高了 Creator 2.0 相比于 1.x 的性能。

但是团队也在 Creator 2.0 里面挖了一个新坑,就是把 DragonBones, Spine 等谷歌编辑器的解析层,从 C++ 挪到了 JavaScript,导致用到骨骼动画的游戏,在2.0里面反而性能降低了。这个坑已经在 2.0.7 里面回填了。

而 2.0.7 里面进一步修复了一些导致无法批量渲染的地方,所以同样游戏在 2.0.7 的 draw call 会比 2.0.0 更低一些。

原生性能这块,我们确实很有蛮多可提升的方案设计,比如:

  • @minggo 正在做的 iOS Metal 渲染、对应到安卓上的 Vulkan
  • @panda 正在试验的 Native Renderer 设计
  • 有可能会上多线程方案

但因为今年绝大多数人都没版号被挤到小游戏领域了,加上棋牌游戏被封杀,所以今年的引擎研发投入完全是小游戏优先了。根据明年的版号情况、以及大家新立项原生游戏的情况,我们也会随之调整在 iOS Android 平台上的研发投入,以满足大家的需求。

1赞

另外说一句, 像塔防这种游戏, 如果敌人很小,重复性又特别高。 保证一个动作4-5帧(省内存),用序列帧会流畅几十倍。

一个人 美术、策划、程序、测试 厉害:+1:

大神有考虑2.0.x也支持压缩纹理吗?

居然把王哲大大也引出来了
字没白码:3:

改动有点大,有空试试吧

请问1.10原生的有什么自己可以优化的空间吗

https://forum.cocos.com/t/cocos-creator-2-010/82661

有1.9.3和2.0.10iOS闪退数据对比,游戏性能我觉得是其次,引擎稳定性才是优先考虑

哎,头脑一热,想用richtext的一个新特性,没办法升级了