Cocos2dx+lua合适还是Cocos2dx+js合适?
问题:
开发cocos2dx手游
Cocos2dx+lua合适还是Cocos2dx+js合适
百牛信息技术bainiu.ltd整理发布于博客园
回答:
链接:https://www.zhihu.com/question/21130385/answer/18485625
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2014.02更新:请放心选择 Lua 吧。触控已经收购了 quick-cocos2d-x,2014年肯定会大力强化 cocos2d-x 的 Lua 支持。
----
我个人肯定是推荐 Lua 的,原因如下:
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 时绝对会节约巨量时间!!!
----------------------------------------
当然,cocos2d-x 目前明显是在主推 JS 的解决方案,因为 JS 可以跨越移动设备、桌面的界限,实现一套程序跑任意平台。不过我个人认为以当前 HTML5 的发展情况,对于要强调体验的游戏来说,HTML5 还要一些时间。
从目前的市场情况来说,Lua 明显是更理性的选择:成熟、安全性高、众多大作采用。
----------------------------------------
前面提到 JS 更容易面向对象,我想可能是因为大家对 Lua 还不够了解造成的错觉。实际上,Lua 和 JS 实现面向对象的机制几乎是一样的。JS 基于 prototype,Lua 基于 metatable,在我看来仅仅是名字不同而已。
----------------------------------------
最后,不得不向大家推荐 quick-cocos2d-x 这个基于 cocos2d-x + Lua 的扩展版。quick 在 cocos2d-x + Lua 的基础上提供了诸多简化开发的扩展功能,以及开发框架。
quick-cocos2d-x 中文站: http://cn.quick-x.com/
最新文章
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
- 视区相关单位vw, vh..简介以及可实际应用场景
- KnockoutJS 3.X API 第四章 表单绑定(6) click绑定
- ASP.NET MVC4 执行流程
- Effective C++ -----条款49:了解new-handler 的行为
- AngularJS 的数据绑定
- PHP5 Session 使用详解(一)
- MVC 扩展方法特点
- js对象2--工厂模式的由来--杂志
- react native web
- IOS获取经度纬度
- 对本地Solr服务器添加IK中文分词器实现全文检索功能
- MyEclipse 护眼配色
- shell入门之函数应用
- 记录安装 java 环境,部署环境变量遇到的小坑
- PropTypes使用
- 有关Set集合的一个小问题
- 1.3currentThread()方法
- javascript之彻底理解valueOf, toString
- C++解析(24):抽象类和接口、多重继承
热门文章
- Codevs1062路由选择
- Linux下使用Shell命令控制任务Jobs执行(转)
- android 获得电池状态
- WIN7实现多用户远程桌面
- Go -- PipleLine
- Shiro源代码分析之两种Session的方式
- [转]java中的字符串相关知识整理
- Java学习之基本概念
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- startActivity、 startActivityForResult 、广播的使用