我应该为游戏选择哪种脚本语言?[关闭]


53

在哪些情况下,哪些脚本语言比其他语言更好?

感谢所有答案,请提供描述,并描述该语言在哪种情况下表现出色。

(请记住,每个答案使用一种语言)

Answers:


39

Lua广泛用于游戏行业。从独立游戏(Aquaria)到AAA游戏(文明)。

核心原因?我要说的是,因为它易于学习且易于融入您的游戏中。但是我敢肯定,对于Python也可以这样说。一般来说,脚本编写并不困难。我认为您应该选择Lua的真正原因是因为它被证明可以为您提供更多的学习资源。


8
Lua非常受欢迎,因为它提供了“元语言”功能。您可以实现面向对象的结构或纯过程函数等。它具有非常简单的C接口,并为引擎开发人员提供了语言本身的很多灵活性。
卡兰萨2010年

3
我不相信python将是一个不错的选择。为Python的C绑定是更多地面向朝向以C延伸蟒,然后在嵌入C.蟒
SpoonMeiser

5
据我了解,与Python等其他脚本语言相比,Ĺua的运行时性能也很好。(它完全支持闭包-如果您问我,这是一个非常漂亮的功能。)
2010年

2
实际上Civilization IV使用python ...
Emiliano

2
@happy_emi实际上,尽管Civ V使用Lua
Tobias Kienzler

22

松鼠

松鼠有一段有趣的历史。它是在游戏设计师遇到Lua不可预知的垃圾收集问题之后构建的,并且疯狂的一切都是空的,即使它不存在也是如此

松鼠是《Left 4 Dead 2》中使用的粗俗语言。该API非常类似于lua(Squirrel的作者喜欢Lua的设计)。

所以Squirrel是一种很棒的语言,因为它是第二代Lua。它采纳了好主意,消除了烦人的怪癖。

同样来自Lua:

  • 协程
  • 表和元表
  • 动态类型
  • 还有更多

松鼠新手:

  • 数组
  • 正则表达式而不是Lua的match语法。
  • C / C ++ / Java / C#样式语言而不是Pascal / Delphi样式。
  • 还有更多

松鼠的主要缺点是它不是Lua。Lua被广泛使用。但这不是一个问题,松鼠是一个轻松的胜利。但是,语言的流行通常本身就是有用的功能,因此决定并不是那么明确。


9

Google的V8 Javascript。

专业版:

相当容易使用

不断进步

强大而灵活

其他正如许多人提到的那样,javascript是一种常见的编程器工具。将其添加到我的游戏中比其他语言开放了更多有能力的人。它还支持大量的转换和转换,以节省程序员的工作量,还使其真正易于使用,并与STL一起很好地工作。

可能的CON:

文档可能会造成混淆,这确实不是最好的。

例子通常是一个怪异的网。缺乏扎实的简单性,它的层次比实际更高。

模板有时会讨厌或避免使用这些模板

SDK代码库大小生成的代码大小可能会显得过大。


对我来说,一个缺点是尺寸。如果您要构建简单/休闲游戏,则v8引擎会很大,甚至可能比整个游戏大很多倍。
Zack The Human

是的,但是作为一个独立的.lib文件,这是一个大问题吗?它只是放在您的SDL或lua旁边。如果您的意思是生成的代码大小,那么我还没有测试过它的大小,但这并不是一个坏点。
underscorediscovery 2010年

我的意思是生成的代码大小。考虑到当今大多数游戏的规模,我认为这还不算太大。
Zack The Human

1
经过测试的默认shell.cc具有最新的SVN时钟,频率为1.441 MB bit.ly/9DNn8J。尽管这看起来很繁重,但是大多数库需要做其他任何事情(网络,图形)也将同样如此。我的带有v8,phoenixGL,ENet,大量增强功能以​​及解决方案中的许多代码(例如压缩,加密,gui库,awesomium)的附带项目在Visual Studio 2008中的时钟为2.5 MB-并压缩为“版本”的构建权重为861 KB。对我来说,那还不是那么糟糕。在某些平台上,我可能会发现这很麻烦-尽管不是大多数情况:)
underscorediscovery 2010年

1
在我的项目中,我曾经使用过V8几次。IMO Javascript是用于游戏脚本编写的最理想的语言。基于事件的性质和基于原型的对象使一切变得如此简单。:)
Stephen Belanger

7

这取决于游戏及其目标平台。

运行100个非玩家角色的游戏(RTS游戏)与仅运行2个游戏(街霸)的需求有所不同。在PC上运行的游戏与在控制台上运行的游戏具有不同的需求。

Lua很受欢迎

GameMonkey由多个团队使用。它比Lua更快,并且在线程方面更好。

Python已在多个游戏中使用。

您可以下载JavaScript引擎,因此可以使用JavaScript。JavaScript程序员比其他任何类型的程序员都要多。

也有专门的语言。

SCUMM已用于多种冒险游戏中,尤其适合那些游戏。


JavaScript是一个非常好的主意。我想知道为什么在这个领域似乎没有牵引力?有任何想法吗?
cflewis

JavaScript确实具有吸引力。Unity使用它。Wolfire Games的引擎也是如此。
AA Grapsas

两个引擎真的没有牵引力。我猜这只是最近的发展是因为在Mono和V8之前没有很多好的JavaScript解释器。SpiderMonkey并不完全是您要说的东西:“是的,我希望我的游戏既快又瘦又稳定!”

4

为了完整起见,另一个选项是mono-script,它允许您使用.NET框架的Novell实现进行脚本编写。这是Unity所使用的。这是有关在应用程序中嵌入单声道的另一页。

Mono框架比那里的大多数(也许全部?)脚本语言要快,因为它没有被解释,并且由于编译器和指令集之间有一层,它使您可以使用多种语言进行编程,包括C#和方言。 Python,Lua和Javascript。

我不确定它是否在所有平台上都是免费的。


4
请注意,如果您要进行控制台开发,那么JITing代码显然是不可能的,因为您不能将数据页标记为可执行文件。IL必须预先编译到目标平台。
杰夫(Jeff)

3
JIT问题也适用于iOS。Mono也具有许可证限制。如果要在不允许最终用户升级Mono运行时的环境中使用它,则需要商业许可证。
山姆

4

就个人而言,当我为自己的项目选择脚本语言时,我发现AngelScript(请参见下面的链接)比Lua绑定到C ++要容易得多。(我实际上为此编写了一个小型包装程序库,以使其更易于使用,但付出了一定的灵活性。)

http://www.angelcode.com/angelscript/

话虽这么说,我怀疑Lua具有一些使商业游戏开发商引人注目的优势:

(a)比AngelScript更成熟和广泛

(b)它的语法对于非程序员来说更容易(AngelScript非常类似于C ++)

(c)它的占地面积比AngelScript小(至少就我而言)

但是,如果您只是在编写一个业余项目,我会说AngelScript至少值得一看。


2

您应该选择一种脚本语言,该脚本语言应与游戏的主要开发语言具有稳定且得到良好支持的绑定。如果您使用C或C ++编写游戏,那么Python和Lua都可以使用扎实的绑定。如果您正在为.NET平台(使用C#或其他语言)编写游戏,那么我强烈建议使用IronPython或IronRuby。两者都是利用Microsoft动态语言运行库(DLR)的完整语言实现,该动态库提供了出色的性能以及与.NET Framework的紧密集成。如今,C#与IronPython / IronRuby之间的互操作性非常顺畅,尤其是在C#4.0中引入了动态调用站点绑定的情况下。


2

方案

好吧,特别是狡猾

使用guile,您可以为自己的游戏使用自己的DSL(特定于域的语言)。一旦习惯了括号和前缀表示法,就可以使用scheme。

如果您打算在严肃的游戏中使用guile,我会等上几个月,直到2.0版本发布为止,因为其中包括IIRC,Ecmascript解释器以及当前的方案。您也可以期望看到速度的大幅提高。


1

这取决于您实际需要什么。正如David所指出的那样,Lua非常受欢迎,尽管一位游戏开发人员向我指出他并不确定原因。我认为它的轻便是一个普遍的原因,但是在这一点上,我希望很多人使用Lua,因为这已经成为事实上的标准。看起来非常适合轻量级的修改。

对于更完善的方法,我想说Python是正确的选择。Civ IV用它达到了不错的效果。


0

选择一种脚本语言而不是另一种脚本语言取决于您的特定要求。

您必须选择的一些选项可能是:

解释器的速度-如果仅使用脚本功能(即开发人员编写静态行为的脚本),那么速度以及功能完善且可扩展的API可能是最重要的方面。我在LUA上有一些很好的经验。

易于学习,可访问性-对于内容/级别设计人员而言,可能难以学习更复杂的脚本语言(取决于背景)以生成动态行为。在这种情况下,在这里使用易学(即常用)和有据可查的语言可能更为合适。JavaScript或Python可能是一个很好的解决方案。

工作流集成-如果您具有使用现有工具的特定生产管道,则在其他工具使用完全不同的工具的情况下,使用对于特定情况似乎最有效的语言可能是个坏主意。如果您有多个程序员在使用不同的工具,则这尤其有效。在这种情况下,使用“不太合适”的语言可能会更有效。


0

如果您正在为Windows编写标题并编写在公共语言运行时(CLR)之上运行的托管代码-例如在C#中-我建议您看一下将(Iron)Python集成为脚本语言。

以我的经验,Python非常容易教给非程序员/设计师。对于开发人员而言,提取起来更容易,因为它的读取方式本质上类似于伪代码。动态键入只是帮助使几乎没有甚至没有以前的编码经验的人建立并快速使用该语言的方面之一。

除了易于学习和强大的语言外,Microsoft的CLR和语言团队(Anders Hejlsberg,Eric Lippert,Mads Torgersen,Jim Hugunin等)在通过新的Dynamic工具公开编译器和运行时功能方面也做了出色的工作.NET 4中的语言运行时(DLR),使静态类型代码与动态类型代码之间的互操作性更加简单。到目前为止,从我所看到和尝试过的内容来看,样板代码已降至最低。它将使您的代码库保持干净和可维护。

您可以利用它来保持游戏脚本部分和引擎之间的摩擦很小。两者都在同一个VM中运行还可以使运行时在执行过程中优化更多代码。


0

答案很大程度上取决于您的环境。我目前正在使用Unity,因此我使用基于Mono的语言(在我的情况下为C#,但是Javascript和Boo也是可选的)。答案完全取决于您的具体情况。


-2

ActionScript是一种动态/静态混合类型的语言,用于创建Flash游戏,可以在网络上广泛分发。Flixel,FlashPunk和Box2d等库都很好地支持了它。


-2

如果您有一个将使用脚本语言的现有团队或将使用脚本的主管(级别)设计人员,那么请选择他们所选择的语言。他们将花时间在上面,所以他们应该得到满足。

[盐粒]如果您没有任何人或没有长期计划, 请自己动手做。是的,为一种脚本语言编写编译器和/或解释器可能需要一到两周的时间,但是从长远来看,灵活性将付出很多倍。只是不要误入歧途,重塑脑袋。[/盐粒]


我会在一两天内在haskell中为lisp / scheme或bash或python或lua或erlang(没有标准库的任何东西)编写解释器或jit编译器。我不建议用C ++或Java编写解释器,只要它不是用于解释诸如Lisp之类的语言即可。无论如何,但这不是问题。
2010年

我认为这个问题更适合于脚本语言的优缺点,而不是如何决定使用哪种脚本。我想还是有帮助的。
Michael Coleman 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.