游戏引擎——cocos2dx入门

简介

Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。

手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等操作系统中。

Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。

cocos2dx 与 UNITY3D

一、区别:

  • 1、COCOS2D开源,有文档支持,论坛资料庞杂博大;UNITY3D闭源,有强大的文档支持,论坛资料一样的庞杂博大。
  • 2、COCOS2D免费;UNITY3D收费。
  • 3、COCOS2D的跨平台,需要大量重写代码;UNITY3D的跨平台,程序员只需要选选按钮就淡定许多的搞定了。

二、拓展:

  • 1、不同:
    • COCOS2D拥有令人发指的可定制性;UNITY3D有一个专门为订制而写的类库。
  • 2、相同:
    • UNITY3D和 COCOS2D-X都是跨平台的游戏开发引擎。

特性

  • 现代化的 C++ API
  • 立足于 C++ 同时支持 JavaScript/Lua 作为开发语言
  • 可以跨平台部署, 支持 iOS、Android、Windows、macOS 和 Linux
  • 可以在 PC 端完成游戏的测试,最终发布到移动端
  • 完善的游戏功能支持,包含精灵、动作、动画、粒子特效、场景转换、事件、文件 IO、数据持久化、骨骼动画、3D

家族成员

cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创建自己的多平台游戏时节省很多的时间。

Cocos2d-html5 :
  • Cocos2d-HTML5 是基于 HTML5 规范集的 Cocos2d引擎分支,具有跨平台的能力和强大的性能,是 Cocos2d 系列引擎随着互联网技术演进而产生的一个分支,该分支基于 HTML5 规范集,目标是可对游戏进行跨平台部署,Cocos2d-HTML5 采用 MIT 开源协议,设计上保持Cocos2d家族的传统架构,并可联合 Cocos2d-x JavaScript-binding 接口,最大程度地实现游戏代码在不同平台上的复用。
JSB :
  • Cocos2d-x JavaScript-binding 是使用 SpiderMonkey 引擎实现 C++ 接口到 JavaSciprt 的绑定方案,它可以使用 Js 快速开发游戏,以更简单的语法实现功能,并且能与 Cocos2D-HTML5 相互兼容,使同一套代码,运行两个平台,这是相比使用 Lua 实现的一个明显优势。
Cocos Studio :
  • Cocos Studio 是一套基于 Cocos2d-x 引擎的工具集,包括 UI编辑器,动画编辑器,场景编辑器和数据编辑器。 UI 编辑器和动画编辑器主要面向美术,而场景编辑器和数据编辑器则面向游戏策划,这四个工具合在一起构成了一套完整的游戏开发体系,帮助开发者进一步降低开发难度,提高开发效率,减少开发成本。

Cocos2d也拥有几个主要版本,包括Cocos2d-iPhone、Cocos2d-X,以及被社区普遍看好的Cocos2d-HTML5和JavaScript bindings for Cocos2d-X。

关于lua,c++,JS

允许开发人员使用 C++、Javascript 及 Lua 三种语言来进行游戏开发。

支持所有常见平台,包括 iOS、Android、Windows、macOS、Linux。

  1. 运行效率:

    Lua 的性能在各种测试里都比 JavaScript 快不少。而移动设备上存在不支持 JIT 的情况(未越狱的 iOS 设备),Lua 对比 JavaScript 的性能优势就更明显。

  2. 安全性:

    现在 cocos2d-x 使用 LuaJIT 来执行 Lua,所以可以把 Lua 代码编译为字节码再打包到游戏里。由于 LuaJIT 的字节码是高度优化过的,所以目前还没有反编译工具。而 JS 虽然也可以用字节码,但从目前的情况看还达不到 LuaJIT 的安全性。

  3. 与 C/C++ 的交互:

    Lua 原本就是作为嵌入式语言来设计的,所以天然和 C/C++ 很容易交互。JS 这方面是个劣势。

  4. 与 Java/Objective-C 的交互:

    不管是 quick-cocos2d-x 里提供的 luaoc/luaj 模块,还是 wax, luajava 这些开源项目,都让我们可以绕过 C/C++ 层实现 Lua 和 Java/Objc 的交互。这个优势在游戏发行阶段,集成各种第三方 SDK 时绝对会节约巨量时间!!!

游戏是非常消耗资源的每时每刻都要大量的计算,

  • 假如有个方法 让 C语言来实现 并且把它完成的时间定义为 1个单位 的时间
  • 那么同样的数据结构的方法在其他语言中
    • java 需要 8个单位
    • lua需要30个单位
    • python需要200个单位
    • php需要462个单位
    • javascript需要621个单位

所以在需要大量计算的环节,代码的结构时间复杂度比较高的 情况下用 C++(肯没直接用C快,但一定比java快)来写, 现在的CPU计算能力都还是蛮高的,所以没必要完全用C++ ,用一些其他的语言开发速度可以大大加快。

个人总结
  • 项目不需要热更新的时候用c++
  • lua,c++都可以用的时候c++更熟悉的用c++
  • c++效率比lua高
  • lua项目的底层框架还是要c++搭比较好
  • c++老司机转其他语言比较轻松。

最终使用那种方式还是需要结合个人,语言,需求,性能综合考虑

  • 当然,cocos2d-x 目前明显是在主推 JS 的解决方案,因为 JS 可以跨越移动设备、桌面的界限,实现一套程序跑任意平台。不过我个人认为以当前 HTML5 的发展情况,对于要强调体验的游戏来说,HTML5 还要一些时间。

网友评价:
前面提到 JS 更容易面向对象,我想可能是因为大家对 Lua 还不够了解造成的错觉。实际上,Lua 和 JS 实现面向对象的机制几乎是一样的。JS 基于 prototype,Lua 基于 metatable,在我看来仅仅是名字不同而已。

从目前的市场情况来说,Lua 明显是更理性的选择:成熟、安全性高、众多大作采用。

坚持原创技术分享,您的支持将鼓励我继续创作!