从 quick 转向 cocos2d-x 3.3 lua

发表于2015-07-31
评论0 2.6k浏览

 

  • 本文链接:http://zengrong.net/post/2188.htm

    • 2014-11-30 更新:
      今天在 quick 的博客上看到了 duceface 的新文章:cocos2d-lua 与 quick 的未来,不由得热(kua)泪(zhang)盈(shou)眶(fa),看来 dualface 一直在努力,终于有成果了。
    • 2015-01-15 更新:
      加入 LiteFeel 的 如何在lua项目中使用dragonbones 文章链接。
    • 2015-01-16 更新:
      今天下载了 cocos2d-x 3.4 RC1 ,发现其中已经集成了一个 simulator,包含了原来 quick-player 的部分功能。根据阳光七月的说法,quick 到了3.4之后将不再单独发展。这真是个好消息。

    在我的第一个 cocos2d-x 项目立项时,我曾经纠结过是使用 Lua 绑定还是使用 JS 绑定。最后选择了使用 Lua : Cocos2d-x noxss language binding:Lua or Javascript? 。cocos2d-x 的 Lua 绑定做得很糟糕,所以,我基于 quick-cocos2d-x 2.2.3 这个更好的 Lua 绑定版本进行了许多修改,那时 quick 还是在独立发展。

    后来,Quick 被触控收购,Quick 进行了不兼容的升级。由于我对 Quick 的修改过多,当时的项目也在非常重要的时期,我没有持续跟进 Quick 的升级步伐,一直在使用自己 forked 的版本。

    在这段艰苦时间中,我在 Quick 社区和 Quick 团队身上也学到了不少东西。感谢 dualface、Jimmy、阳光七月、ChildhoodAndy、微微蓝 等朋友提供的无私帮助。

    在这些朋友的帮助下,我对 openGL ES 做了初步的了解,写出了 cocos2d-x 的 filter 组件;熟悉了 cocos2d-x 引擎的源码架构;把 DragonBonesCPP 整合进入了 quick 框架中;了解了 lua 与 C++ 交互的方式……

    下面有一个不全的列表:

    1. 加入 SocketTCP 对 luasocket 进行了封装;
    2. 模仿AS3用lua实现了 ByteArray
    3. 加入 DragonBonesCPP 组件,使用 CCDragonBones.lua 进行了封装;
    4. 加入 cocos2d-x-filter 组件,使用 filters.lua 进行了封装;
    5. 加入了 CCDrawNodeExtend.lua 对 CCDrawNode 的常用方法进行封装;
    6. 对 display.lua 、CCSpriteExtend.lua 等等功能进行扩展,增加 获取纹理像素 、printscreen 等常用方法;
    7. 让 CCSpriteFrameCache 和 CCAnimationCache 支持异步加载;
    8. 在 network 中增加上传文件功能;
    9. 在 cocos2d-x 中嵌入浏览器
    10. ……

    现在,新项目立项,我面临又一个选择。

    根据目前 cocos2d-x 的发展情况,无论从代码质量,还是引擎性能和维护成本来说,使用 3.x 版本是必须的,2.x 应该放弃。从触控现在表现出来的状态看,业务的重点是在 JS 版以及周边工具集。Lua 完全没有机会。Quick 的发展受到 cocos2d-x 团队的极大限制,速度极其缓慢,架构多次调整,Quick3 也迟迟没有发布。

    我依然不看好 cocos2d-x JS 版。从目前触控的混乱情况来看,如果选择使用 H5 ,我肯定不会使用 cocos2d-x。

    Lua 一定是移动设备上最快的,这点毋庸置疑。但从目前 Quick 的发展看来,我似乎不能继续使用它了。我不愿再走 quick 2.2.3 到 2.2.5 那段不兼容的老路。在 Quick 的发展方向没有确定的前提下,为了保持向下兼容,我现在的选择是: 直接使用 cocos2d-x 3.3 Lua 版本。

    这个选择相当痛苦。cocos2d-x 3.3 的 Lua 支持非常糟糕,和 Quick 完全无法相比。一堆错误的提示和 warning,而且没有 Quick-player 的支持。从 dualface 那里得到的消息,Quick 已经把大部分的 C++ 修改都整合到 cocos2d-x 中了,但这还不够。

    我花了许多时间让 Quick 的 lua 框架能在我们的 cocos2d-x 3.3 lua 项目中跑起来,接着我把 DragonBonesCPP 和 filter 都移植到了 cocos2d-x 3.3 中。目前,我们的团队已经可以使用 cocos2d-x 3.3 进行游戏的正常开发了。

    我将这段时间积累的移植经验写成了一系列文章,方便以后查阅。下面是个列表(不断更新):

    如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引