最近正为游戏引擎选择一款较好的逻辑脚本而头疼不已
1. Lua
Lua用了5,6年的样子,从LuaPlus到lua-tinker再到lua_bind. 虽然lua本身很小巧方便,但是其不支持面向对象特性,让很多人在使用时模拟了很多面向对象的特性,但是这种做法在调试时简直是噩梦.
我觉得游戏脚本最好是能预编译成byte code,让编译器在编译期将很多的bug暴露出来,而不是像lua那样.很多空访问错误必须要等到runtime才能暴露.让调试效率大大降低.这点,mono C#就是极好的选择.
2. Mono
由于Unity的流行,Mono被带入游戏开发者的视线内.其内置的很多系统脚本都是用C#写成,而且逻辑脚本用C#编写也是非常清晰严谨的.
据说Mono在Windows下编译异常麻烦,而且嵌入方式也没有太多例子,现在这块严重缺乏资料.
3. V8
Google V8正是由于Chrome而风靡起来.直接JIT方式就是Chrome速度飞快的原因.
最近down了一个下来试了下,果然名不虚传,API也非常的易用.不过由于不是很熟悉JavaScript的原因, 自己用scons编译出一个v8的shell,跑了一个带类继承的例子,居然不识别class关键字.这才感叹还不如用小巧的lua呢.在我看来,JavaScript与Lua比较,也就是个能new,但是没class的语言.也被别人称为半吊子面向对象,都是使用prototype方式来实现类功能.
4. JavaScriptCore
在Google V8的类测试碰壁后,马上研究了下Unity下的JavaScript到底用了什么库,没错就是Apple Safari里的JavaScriptCore. 这东西资料比Mono还少,都是高龄库了.想必整合不是一般的麻烦.但是还是不确定这个脚本引擎是否原生支持类
5. Python
Python? 没想过这种格式诡异的语言,正如Unity里支持Boo(一种很类似Python的语言)很少有人用一样, 上次用过Python是在一个build系统里, 游戏里是不会考虑这种脚本系统的,效率也是很大的原因.
6. AngleScript, GameMonkey
这两种语言都是很老的游戏脚本语言,不过都是类c++方式的,不过由于项目使用不多,或许是有一定的bug,资料也相对较少,所以可能最后考虑