战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

最近正为游戏引擎选择一款较好的逻辑脚本而头疼不已

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,资料也相对较少,所以可能最后考虑

posted on 2011-05-14 15:13 战魂小筑 阅读(11445) 评论(24)  编辑 收藏 引用 所属分类: 脚本技术C++/ 编程语言

评论

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-14 15:30 K.V
还真没遇到一个让人十分中意的脚本语言,lua相对好点吧。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-14 16:08 doylecnn
lua和javascript都是和c++一样的非纯面向对象语言
所以如果lua和javascrupt是半吊子面向对象语言。。。c++也是个半吊子

python在EVE中有应用,可以去看看,了解下
以及python都被称为格式诡异的语言(你写c++从来不缩进?)
那,哪些brainfuck (http://www.muppetlabs.com/~breadbox/bf/)之流要你要怎么称呼它们阿

嘛,以上纯吐槽  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-14 17:42 right
据我所知,python在游戏行业的应用还是很广泛的,不知道楼主是怎么得出这些结论的,另外,学习或评判一个语言的时候,建议楼主先仔细研读这个语言的历史严格,了解其设计决策,从此出发,你会发现:python并不怪异,是那么舒服;说出JavaScript竟然不支持class关键字这句话,是多么的浅薄。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-14 17:45 战魂小筑
@right
就等你的回复了, 我上面说了,我对Javascript确实不熟悉. V8的例子里,我没看到过有class的例子. 但是Unity中嵌入的JavaScriptCore是支持类的,但我不清楚怎样让v8也支持  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-14 17:47 战魂小筑
@doylecnn
c++的模板是其他语言不能比的,虽然C#也支持了.但配合C++继承C的宏和模板,c++也强大的不得了,不能算半吊子

python我用过, 其实不止我一个人说那种缩进诡异,但我觉得更不爽的是它的运行效率  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-15 13:33 Adrian
@doylecnn
什么叫纯面向对象语言?单继承树,都是虚函数吗?恐怕每个人标准都不一样。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-15 13:38 right
@战魂小筑
v8是依据ECMAScript规范实现的,规范不改动,google不会无缘无故扩展出class关键字。
刚接触python的时候,我也认为格式很诡异,用久了,非常舒服的,代码清晰易读。至于效率,性能敏感的地方做成C扩展,或者选择其他语言。
C++没有内置反射,写某些类型的应用的时候很辛苦(比如可视化编辑器,通用对象序列化等),模版足够强大,但是严重拖慢编译速度。
还是大家都知道的那句话:没有万能的语言,在合适的地方选择合适的就好。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-15 18:20 expter
@战魂小筑
lua的luaL_loadbuffer函数接口
功能就是载入并进行预编译的一段Lua代码。

所以runtime应该是函数接口的逻辑问题,  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore[未登录] 2011-05-15 23:31 杨粼波
lua很轻量级;

python相对重一些,性能要比lua稍要差,不过还是很好用的,毕竟OO支持要好点,库神马的也多点;

jsp的话,语法接近Java,倒是合适招一些会点Java的人,v8采用的是编译执行的方式,性能还过得去;

Ruby其实也很不错,只不过它的GC有点让人纠结。

Mono严格意义上不算是一种语言,只能说是一种类似.net的平台。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-16 07:47 so
个人支持python,语法简洁。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-16 08:10 战魂小筑
@expter
lua已经用4,5年了,沙盒模拟,远程调试神马的都自己写过.估计是腻了,想换一种新语言  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-16 09:47 空明流转
关于js和Lua和Python的评论,真扯。。。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-16 10:02 waiting4you
SpiderMonkey?火狐用的Javascript引擎,速度没有V8快,不过逻辑比V8清晰(个人观点)  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-18 09:29 Husiwa
Mono很好,虽然编译麻烦了一些,但是用起来速度比LUA快了六倍左右,对于大型应用相当给力  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-24 12:37 天下
也许这个语言可以去了解下:
lua的衍生版本
Squirrel松鼠脚本

  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-25 15:34 egmkang
C#当脚本,策划能写么  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-05-27 08:46 bbp
我觉得博主用lua的思路非常奇怪,本来就不是面向类的语言,为什么非要当做面向类使用,我们项目用了一年多lua,所有逻辑都是使用lua写的,没有使用过任何类、继承之类的cpp思想,一样用的好好的。博主被cpp毒害了。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-09-23 01:01 zenk
请问一下博主,我有兴趣研究一下lua, 你都用什么编辑器来写lua脚本呢?  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-11-18 09:36 xoyojank
我这边mono嵌入成功  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2011-11-18 09:38 xoyojank
另外, UnityScript是基于Boo实现的, 不是JavaScriptCore吧  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2012-08-03 16:01 rosehack
python C++ 互相交互,必须得用一个DLL,这编写游戏时也太郁闷了吧。  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2012-09-02 21:36 anydream
javascript里一切皆是对象. 如果想声明自定义对象应该这么写:
function MyClass()
{
this.member = 123;
}

MyClass.prototype.getMember = function()
{
return this.member;
}

谷歌V8是我目前发现的最快的脚本, 现在的项目正在用它.  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2012-11-07 15:27 flyingtimeice
最快的应该是luajit 2.0  回复  更多评论
  

# re: 迷茫的游戏脚本选择 Lua, Google V8, Mono和 JavaScriptCore 2014-01-15 10:59 浩毛
看你想用脚本和主机代码各自负担的职责有好多

比较少就用lua,如果以脚本为主,用python,像bigworld那样  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理