在libgdx中引入脚本系统

在libgdx中引入脚本系统

最近在使用libgdx的过程中,遇到一个问题,那就是libgdx引擎缺少一套相应的脚本系统,而在很多游戏的开发中都需要将某种脚本语言集成到系统之中,作为一种必不可少的补充手段,借助脚本语言的简介、快速、动态以及灵活的特点来提高开发的效率,同时使用脚本,可以在维持整体代码框架基本稳定的情况下快速的修改游戏逻辑和配置游戏数据,这使得团队之间的分工合作变得更加简单。而集成脚本的方法大体上可以分为两种,一是将现有的某种脚本语言(比如Javascript、Lua、Ruby、Python等等)集成到你的系统中,这需要在你的代码中为它们提供一个解释执行的环境,通常是要实现相应的解释器或者运行时(runtime)环境;第二种选择是自己设计一套专用的脚本语言,然后实现相应的解释运行的环境。这两种方法的各有优劣,第一种方法免去了自行设计的脚本语法以及构建解释代码的麻烦,可以借助成熟语言优势,避免重复“造轮子”,而且如果你的代码是面向其他开发者的话,也能够降低他们的学习曲线,而这种方法的问题在于,游戏中的脚本毕竟不同于通用语言,可能并不需要那么多复杂的特性,它不是追求“大而全”的,只需要满足某些特定的需求,所以引入其他脚本有时会显得累赘;另外虽然很容易流行脚本语言的各种绑定,但是要把它与你的框架结合起来有时还是会遇到代码相容性的问题。自己设计脚本语言的好处在于可以按需求设计,只实现自己需要的功能和特性,避免需求剩余,同时代码之间的相容性也会提高很多;它的问题就在于,实现简单的特性是很容易的,但要实现复杂的语言特性则可能变得非常复杂而漫长,会涉及到复杂的编译原理,甚至是虚拟机设计方面的知识,而这样设计出来的脚本语言已经很接近已有的语言,不异于是重复“造轮子”,这就偏离了初衷,同时对于其他的使用者而言,一种全新的脚本也加大了它们的学习成本。所以说引入脚本系统是一个权衡各方面因素综合考虑和决策的过程。

集成脚本系统到libgdx也考虑了很多的因素,最终决定了将Javascript这种比较流行的语言引入到libgdx中,期间也考虑了很多其他的选择,比如Lua,很多游戏都使用其作为脚本,虽然笔者也大致学习过Lua但对其始终还是不甚了解,所以Lua的方案暂时搁置,待有机会再研究。而另外一种语言Python可能是笔者最熟悉也是最愿意引入的,但无奈,Libgdx是强大的Java跨平台游戏框架,在Windows、Linux、Android、IOS、MacOS、WebGL下都可以运行,而在java中使用Python则要使用到Jython,不说其他平台光是在Android平台下支持起Jython就没有找到解决方案,虽然也有SL4A,ASE之类的项目可以让你在Android下使用众多脚本语言,但是它是使用远程调用机制来实现的,所以它更多的是与Android这个系统结合而不是与宿主语言或者说Libgdx这个框架结合,我们还需要更加“直接”,“原生”一点的解决方案。所以我最终选择了Javascript这种脚本语言,一来比较熟悉,二来在有支持各个平台的脚本引擎,比如Mozilla的Rhino引擎(查看github)和Chrome V8引擎的java绑定——J2V8(查看github)。两种方案,Rhino是采用纯Java的封装,使用起来更为方便一些,而J2V8则是针对C++ V8引擎进行了封装,通过JNI把某些接口暴露给Java,所以用起来感觉上更加接近C++一点,最能感受到这一点的就是对于某些对象和资源我们必须手动的进行释放,而不能使用垃圾回收技术;这两种方法都可以实现宿主(Java或者说Libgdx)与javascript的通信,而且平台适应性都还不错,但是在效率上J2V8要远远胜于Rhino,这得益于它精心的设计,而这也是我最终选择J2V8的原因之一。

而J2V8的问题在于它的文档比较少,仅仅只有作者的几篇博客文章,这给学习带来了不少的难度,好在它是一个开源项目,所以可以有源码进行参考,而笔者也初步在linux平台和Android x86以及Android arm环境下进行了测试,都正常的跑起来,接下来,就是进行进一步的学习了,希望能够将这个脚本引擎比较完善地集成到libgdx中,让游戏开发变得更加简单一点。

Ps: 鉴于国内目前介绍J2V8的文章及其稀少(这也证明这是一个比较小众的项目,关注度不高⊙﹏⊙|||),所以我决定把作者的那几篇博客给翻译过来,顺便加上自己的一些心得感受,有时间的话再写几个小例子,如果有兴趣的可以一起交流交流。

Pps: 为什么是人肉翻译而不是机翻?表示看过几篇机器翻译的技术文章,那效果还不如看原文,简直了……突然很感谢让我好好学英语的老师:-D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值