您会为C ++游戏项目推荐哪种脚本语言?[关闭]


14

这里所说的脚本不仅意味着将配置数据放入脚本中,还意味着对项目的某些部分进行脚本化,例如一些类方法,测试特定的游戏循环等。这不仅是为了加快开发速度,而且还允许玩家看到其中的一些内容。脚本来调整游戏的某些方面。

诸如Lua之类的语言具有诸如luabind之类的包装器,但是当我过去使用它时,它会遇到问题,因为它不支持继承上下文中的方法重新定义。

您对使用或不使用的语言/包装有什么建议?

Answers:


9

Lua脚本视频游戏
Lua脚本游戏引擎

我认为Lua是最好的镜头。

本文是关于集成Lua和C ++的。它说:

LuaBind是很棒的产品,但对我来说,它看起来太复杂了。对于其中一个代码来说,要遵循类和对象的位置并不容易。还看到我想使用模板将Lua集成到wxWidgets应用程序中,这有点不行(您可以在wxWidgets网站上阅读跨平台问题)。

还有许多其他绑定库:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

最好的C ++ / Lua包装器是什么?

只需选择并享受。


是的,Lua非常简单,并且很容易与C集成。实际上,这是Lua的主要目标,是一种嵌入式语言。
Marco Mustapic 2010年

感谢您的LuaBind参考,可能挖掘到其他具有约束力的图书馆将说服我再次采取的Lua
弗雷德里克Imbeault

我建议您只在主线程中运行脚本,如果性能受到关注,请为其提供一个池分配器。
Kylotan 2010年

5

我一直喜欢Chaiscript ; 我已经使用了很长时间,但是到目前为止看起来还不错。

与Python或lua不同,它是从头开始构建的,可与C ++一起使用。绑定过程似乎比使用luabind / etc干净得多。

这是网站的摘要:

ChaiScript是第一个也是唯一一个从头开始设计并考虑C ++>兼容性的脚本语言。它是ECMAScript启发的嵌入式功能式语言。

ChaiScript是根据BSD许可获得许可的。


有趣。那性能测试呢?有ChaiScript / Lua / Python比较吗?
topright 2010年

很有趣,到目前为止,您是否遇到过任何破坏/错误/性能问题?
弗雷德里克Imbeault

我还没有看到任何基准,但是我还没有任何性能问题...到目前为止,我的主要要点是它不会隐式在数字类型之间转换(因此,如果将int传递给带有浮点数的函数等)。
莱利·亚当斯

1
仅供参考,因为此注释已有6年历史了-ChaiScript现在确实进行隐式数字转换。
lefticus

5

我会推荐Lua
Python也很受欢迎。许多功能强大的游戏引擎(例如Blender)都在使用它。
C ++ :: Boost有一个可用于Python。
我读过有关Squirrel的文章,但没有使用。

您可以阅读此游戏引擎概述。有一个Scripting专栏。您可以看到Lua和Python是最流行的脚本语言。


关于Boost,我认为这可能是一个庞大的库,并且很多事情在所有项目中都不太有用。实际上luabind经常使用Boost,这是我不喜欢的事情之一。
弗雷德里克Imbeault

1
我会说这是一个优势。您有许多开箱即用的解决方案。而且您的项目只有1个外部依赖项-Boost。很少有很多小库(使用不同的样式,方法,许可证,并且依次可能具有外部隐式依赖),这些小库很难更新,与您的代码同步以及难以维护。
topright 2010年

1
而且,您仅包括所需的那些Boost库(标头)。Boost很大,但是您不需要关心,直到需要这个。
topright 2010年

关于python和Lua,是否有一些C ++包装器可以让您重新定义类方法,创建新方法等?是否可以通过C ++代码(出于安全性)控制此功能?就像我说的那样,LuaBind可以执行这些操作,但是在继承的上下文中会失败,这在游戏项目中很常见。我想重新定义的方法例如,测试特定的游戏循环,像玩家这样的实体的更新方法,游戏世界本身的更新方法等。
FrédérickImbeault,2010年

Lua没有类和对象,但是它们可以由表模拟。这是我更喜欢的面向OOP的Lua库: love2d.org/wiki/MiddleClass
topright 2010年

4

为什么不建立自己的?

如果您有时间,耐心和学习意愿-您可以随时尝试开发自己的脚本引擎,并提供所需的所有功能和语法。

优点

  1. 您将了解计算机科学的有趣部分。
  2. 通过开发“内部”脚本引擎,它使您可以完全根据需要定制引擎,从而为您提供从头到尾的完全控制。
  3. 如果您需要在以后进行任何更改,则可以更轻松地了解自己的代码库的内容,而不是学习其他人的内容。
  4. 您无需担心使引擎与其他人的补丁保持最新。

缺点

  1. 时间。没有多少人拥有它。如果您现在需要一些东西,请尝试使用现有的引擎(例如已经建议的引擎之一)。

  2. 速度。许多现有的脚本引擎都非常快-自定义解决方案可能没有那么快。

  3. 团队规模。许多现有的脚本引擎都有较大的团队在代码库中工作,无论是私人团队还是全球志愿者,对于要由许多其他人检查和重新检查的代码,都有话要说。

  4. 脚本引擎需要一定数量的初始计划才能有效发挥作用。还有许多基础工作也可能需要实施,而这些基础工作可能根本与实际的脚本引擎无关。

  5. 您的玩家库/开发人员必须习惯于您的脚本引擎。如果语法和功能与大多数现代脚本引擎几乎相同,这可能不是问题,但请注意这一点。

这绝不是详尽的清单。如果发现自己必须对现有脚本语言的后端进行大量更改才能获得所需的功能,那么IMO您可能应该寻找更符合您要求的另一种引擎,或者只是自己构建。

我意识到人们乐于抛弃“懒惰”和“不要重新发明轮子”,但是我认为关于学习如何完成这些事情还有很多话要说。对于您的项目,特定的实现可能会比一般的实现更好。

人们在讨论该主题时分享的最喜欢的文章是“用C ++创建脚本系统”:http : //www.gamedev.net/reference/list.asp? categoryid= 76


2
我同意这具有特殊的教育优势。仍然需要编程语言理论(很多人认为)方面的知识和技能,以及计算理论的一些知识。如果这个答案接缝吸引到别人,我会建议论文两本书amazon.com/gp/product/0136073476/ref=oss_productamazon.com/gp/product/0534950973/ref=oss_product
弗雷德里克Imbeault

但是,如果您对这些事情没有真正的了解,您会感到惊讶。许多MUD的脚本语言只不过是一系列带有一些可启用条件的hack的语句列表,而仅凭它们它们就可以实现很多目标。
Kylotan 2010年

去过也做过。学到了很多有关解析,编译器设计,字节码机器等知识。下次我可能会使用Lua并更加感谢。:)
卡兹巨龙

2

我已经尝试过Lua,Python,Scheme和Squirrel。Lua表现最好。它比Squirrel具有更大的社区和更好的支持,并且比Python具有更好的内存和性能特征。Scheme的工作原理也非常好,并且只有很小的解释器,但是对于设计师来说,很难将他们的头脑包裹在一种功能语言上。


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.