为什么我们在开发中使用脚本?


67

在我当前的项目中,Lua脚本由服务器端的C ++函数调用。之后,脚本再次调用仍在该解决方案中的C ++函数。为什么我们应该这样做而不直接调用C ++函数?在什么情况下需要脚本?

Answers:


73

脚本通常在运行时进行编译,而宿主语言将在编译时进行编译。这意味着如果脚本更改,我们不需要重新编译。重新编译一个完整的游戏可能需要几分钟到几个小时,这意味着对生产力的巨大冲击。

通常,关键代码或后端代码不会被编写脚本。这段代码应该运行很快,而内存管理通常至关重要。
在游戏中,游戏逻辑和配置通常包含在脚本文件中。这些脚本可以由非程序员(如设计师)轻松更新以调整游戏玩法。脚本语言很简单,并且为此目的以宽容的方式行事。

通常,脚本语言还用于实时执行脚本。这对于调整一些游戏元素甚至调试非常有用。许多游戏为此目的(主要是内部目的)提供了一个控制台。

您很可能只通过脚本就可以使用现有的游戏引擎来创建游戏。的游戏引擎层从而完全从游戏逻辑层分离。像这样,通常可以使用现代引擎轻松创建FPS或RTS游戏,但是任何类型的游戏都是不可能的。MMO可能需要另一种引擎。

因此,最重要的是去耦。上面列出的好处通常会超过创建或集成脚本语言的额外工作。


7
+1表示非程序员通常更容易更新脚本。设计师并不总是程序员,也不一定是程序员。
橡树

19
我觉得我在每个有关脚本的问题上都在重复自己的话-如果您的工作流程需要非程序员进行编程(包括脚本),那么稍后它会给您带来麻烦。设计师并不总是程序员,但是一旦他们编写了一些平凡的脚本(例如,一旦他们尝试定义一个函数或使用一个循环),他们就会假装成一个。如果他们没有编程方面的培训,那将为所有人流泪和浪费时间。

5
Joe-这并没有使论点无效,它只是意味着您必须确定将“编程材料”与“设计材料”分离的位置,并且根据设计师的技术专长(或缺乏),分界线会有所不同。其)。
伊恩·施雷伯

3
我敢肯定,任何有自尊心的设计师都会接受至少一种语言的良好培训。为了澄清一点,我想细化“非程序员”一词,因为某些专业不是软件工程师。我很遗憾使用这个词,感谢乔,我觉得这个词很含糊。我相信会有各种各样的程序员,从编写简单XML到硬核汇编再到数学信号处理的程序员。我希望这可以解决“非程序员”对偶问题。
Nef

8
我没有听到有人建议设计师应该为生产编写复杂的,关键任务脚本。但是,对编程不了解的设计人员仍然可以通过实验来调整某些脚本(然后将其交给实际的程序员)。他们当然可以在运行时从控制台编写简单的临时脚本,以方便进行自己的测试。我想设计师可能想要利用基本脚本来为新的屏幕设计提供原型(即使它们不过是半功能的交互式模型)。大量非生产代码需要编写。
Mike Strobel,2010年

38

您问错了问题。我认为,真正的问题是我们为什么要忍受C,C ++,Java等“非脚本”语言?答案是原因之一:性能。(也许还有惯性,但是惯性是由于性能而存在的,任何能够编写出色的C / C ++ / Java的人都可以编写至少可传递的Ruby / Python / Lua / JavaScript。)

我们使用“脚本”语言(这实际上意味着非常高级的垃圾收集,并且通常以某种形式进行松散的键入和动态编译),因为对于任何人(包括程序员)来说,它们通常都是更容易编写代码的语言。愚蠢的事情,例如记得在malloc之后释放代码或确保代码是异常安全的,或者记得将所有析构函数虚拟化。如果我们的计算机速度无限快,那么我们将对所有内容使用“脚本”语言。


4
我喜欢这种说法这么远优于“因此设计人员可以编程。” 放弃快速开发的价值并能够在不重新编译所有内容的情况下进行更改试验是一个非常糟糕的主意。
ojrac

10

游戏逻辑的脚本语言是软件体系结构模式“ 交替硬层和软层”的一个很好的例子。在该站点(以及我确定的其他站点)上,有一个关于这样做的好处的很好的讨论。


8
  1. 每个新的lua类都是两行。每个新的C ++类都是痛苦的。
  2. 当您想要的只是乱码值时,不要抱怨类型。
  3. 垃圾收集。
  4. 脚本代码很好地隔离在虚拟机中,避免了所有那些令人讨厌的段错误和数组溢出。

5

脚本更改易于部署。例如,您可以将脚本保存在数据库中,这意味着您无需发出完整的二进制重新部署和可能的服务重新启动,只需发出一条SQL UPDATE语句,然后可能会向运行中的服务发出重新加载脚本的信号。

此外,脚本语言通常易于理解且易于编程,因此您无需为大多数代码(如果使用大型RPG, AI,法术,物品效果和世界本身的脚本通常大于引擎代码)。由于垃圾收集(在Lua的情况下)和更高级别的抽象,脚本语言允许更多地关注“什么”而不是“如何”。


4

脚本非常有用的一种情况是,我们希望引擎可以通过插件/附件进行扩展。这些扩展在许多情况下是由非专业人士(例如高级游戏玩家和发烧友)创建的。为此,脚本更安全,更容易。通过使用脚本,他们不需要使用编译器,也不需要知道指针。

魔兽世界就是一个很好的例子。它具有社区创建的数千个附加组件。这些插件使用LUA + XML编写。

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.