前言:
而今看官们对“luatojs”都比较珍视,朋友们都需要了解一些“luatojs”的相关知识。那么小编也在网摘上网罗了一些关于“luatojs””的相关文章,希望大家能喜欢,姐妹们快快来学习一下吧!《大话西游》用的脚本语言是微软的JScript(JavaScript的一种方言),维护不便bug多,受系统IE版本的影响兼容性差。所以2002年网易开发《大话西游II》时,决定在客户端内嵌别的脚本语言。当时该项目技术负责人云风认为要挑不出名的语言,让做外挂的人搞不懂(《大话西游》一代被外挂《月光宝盒》搞死了),于是就选择了Lua 4.0。
云风在九十年代就开发游戏引擎并建设个人网站(云风工作室),在游戏开发领域声望高。网易《大话西游II》是首个在市场上取得成功的国产网络游戏。所以后来国内游戏开发行业纷纷受此影响采用Lua.
技术方面:
现在,2013年,Lua和其他流行脚本语言Python、JavaScript各分秋色:
语言规范精简、运行时库小。其创始人称Lua是穿过针孔的语言(Passing a Language through the Eye of a Needle),他加入的任何语言特性都能用C API简单的调用。易于创建受限环境,C语言一端可以控制暴露给Lua脚本的任何功能。我猜这也是《魔兽世界》的插件语言选用Lua的原因。性能方面,虽然仍然比Python快,但不如V8(谷歌的JavaScript实现)。协程对于编写并行逻辑,非常有用。而Python、JavaScript都不支持协程,只有StacklessPython、call/cc等方言支持类似功能。Lua的元表很有用。不过我听说Python也支持类似的功能。JavaScript的原型链则只是元表功能的十分之一左右吧。Lua支持弱引用。对于上层逻辑用处不大。但对于底层引擎管理资源,超级有用。JavaScript不支持弱引用;Python支持。Lua有个非官方实现,Luajit,性能不错。
但是回到2002年,Lua和JScript相比,优势很大。
与C/C++交互方便。Lua的C API简洁正交,而JScript的COM接口臃肿繁杂。高性能。Lua虚拟机实现简单高效,比起JScript,又快又省内存。开源。云风为了防外挂,后来修改了《大话西游II》的Lua字节码格式,让官方的Lua虚拟机无法兼容《大话西游II》的Lua字节码。如果采用不开源的JScript,就不可能自己修改虚拟机和编译器了。
不过很遗憾,《大话西游II》的Lua 4.0并不支持协程。
------------------------------------------------------------------------
最后我想说,开发游戏并不一定要脚本语言。C/C++这类低级语言写逻辑太不方便,脚本语言能弥补这个缺陷。但如果你的项目主要语言不是C/C++,而是D、Java、Scala、Haskell、Go、C#、F#等性能接近C/C++的高级语言,那么你就不需要额外的脚本语言。王垠写过什么是“脚本语言”,和我的看法基本相同。
当然还有Haxe这种既可以编译成脚本语言,也可以编译成C++的古怪语言来捣蛋。