简介
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。
运行效率:
Lua 的性能在各种测试里都比 JavaScript 快不少。而移动设备上存在不支持 JIT 的情况(未越狱的 iOS 设备),Lua 对比 JavaScript 的性能优势就更明显。
安全性:
现在 cocos2d-x 使用 LuaJIT 来执行 Lua,所以可以把 Lua 代码编译为字节码再打包到游戏里。由于 LuaJIT 的字节码是高度优化过的,所以目前还没有反编译工具。而 JS 虽然也可以用字节码,但从目前的情况看还达不到 LuaJIT 的安全性。
与 C/C++ 的交互:
Lua 原本就是作为嵌入式语言来设计的,所以天然和 C/C++ 很容易交互。JS 这方面是个劣势。
与 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 明显是更理性的选择:成熟、安全性高、众多大作采用。
- 推荐
- 官方文档:http://www.cocos2d-x.org/docs/cocos2d-x/zh/about/learn.html
- OC/Swift - C++交互与混编:http://edu.51cto.com/center/course/lesson/index?id=57316
- 入门实战-飞机大战游戏:http://www.maiziedu.com/course/662-9914/