脚本语言和游戏开发/编程

时间:2011-09-15 16:28:22

标签: c++

好的,所以我一直在进行2D游戏开发/编程,我见过很多游戏也使用某种脚本语言。所以我想知道 - 在游戏中使用脚本的目的是什么?我知道答案并不简单,我一直在努力考虑所有的可能性。这就是我到目前为止所知道的:

1)脚本允许更改游戏而无需重新编译。

2)非程序员可以更轻松地使用脚本。

3)脚本允许我将引擎与游戏本身分开,这样我就可以更快地制作具有相同组件的其他游戏吗?

这就是我所知道的一切。我的下一个问题是,如果我要单独开发Dev /编程游戏 - 我真的需要使用脚本吗?或者我可以使用像python或ruby这样的东西对游戏进行原型设计,以便进行快速测试,然后用C ++重写代码,节省时间和编译器错误等等?

我想知道的另一件事是,我最好使用Ruby或Python,因为我最熟悉那些?或者,如果它更符合我的目标,我应该使用Lua,Perl还是其他东西?说到这件事,我应该使用什么脚本?我应该使用它们来定位和建模游戏菜单UI,写入/读取保存文件,加载地图级别,保持数组或游戏术语结构,例如“新游戏”或“退出”,以上所有,以上都不是?

如果我使用脚本,最终用户是否不允许编辑游戏机制?或者有没有办法将脚本打包成一个引擎可以读取的压缩文件?

最基本的,我想知道:

我应该在游戏中使用什么脚本?为什么?

如果我单独工作或与程序员一起工作而不是Devs,我是否需要使用脚本语言?

如果我要制作平台游戏,角色扮演游戏或者有什么东西,我应该使用哪种脚本语言?

10 个答案:

答案 0 :(得分:11)

您的前三个原因都是100%正确,这是使用脚本语言和游戏引擎的主要原因。

就我个人而言,我只是通过Luabind真正体验过Lua。设置有点棘手,但值得。使用脚本语言可以做的是公开您希望自己能够使用的“用户”的数据结构和/或功能。一般来说,唯一可以编辑的游戏机制等就是你允许的那些。

我应该在游戏中使用什么脚本?为什么? 资产加载,暴露功能/类型,即我们的游戏引擎(用c ++编写),我们有一个基础级别,然后从它继承许多不同类型的级别,如波级,死亡匹配等。用户只需在脚本中说明他们需要什么类型的级别,然后在这里查看资产。在我的演示中我们有;

等级= “wavelevel”

- 等级初始敌人数量

EnemyNumbers = “3”

- 等级总波数

波数= “4”

- 波系数

WaveCoeff = “1.1”

- 地形大小

TerrainSize = “256”

- 地形文件

TerrainFile = “资源/型号/ mountainous.raw”

不要过多担心数字和所有这些。

正如您所看到的,它可以执行一些资产加载以及确定级别类型

我们还对AI脚本进行了很多控制,事实上,数据结构几乎完全暴露给了Lua。

如果我单独工作或与程序员一起工作而不是Devs,我是否需要使用脚本语言?

是的,不是吗?当然,我们都更喜欢“真正的”编码。如果你可以让你的游戏引擎足够抽象,只用Lua构建完全不同的游戏,那么这意味着你做得很好并且设计得非常好。

你需要考虑的另一件事,特别是如果你的游戏引擎非常庞大,让我们面对它,实际上并不是一个小的,每次你编译,它可能需要几分钟!这是在这里花时间的链接器。

如果我要制作平台游戏,角色扮演游戏或者有什么东西,我应该使用哪种脚本语言?

我只使用过Lua,所以这是我在这里给出的唯一建议。

希望这对您有用。

答案 1 :(得分:5)

老实说,这听起来像是你第一次尝试游戏,你甚至不应该担心这种事情。相反,我更担心的是将你的项目范围降低到雪球实际完成某些事情的水平。如果你还没有在Tic-Tac-Toe或Pong的水平上做过什么,那就先做吧。你学到的东西比担心脚本语言更有价值。

哦,如果你正在做一个RPG作为你第一次尝试游戏。别。它们是迄今为止最难实现的游戏类型,即使是专业开发人员也可以使用很多很多倍的资源。保持简单,并将其作为学习经验。

回到你的问题: 如果您是唯一一个能够看到您的游戏的人,那么您选择是否使用脚本语言。如果它可以节省你的整体时间,或者你想学习如何将脚本与代码集成,那就去吧,但要注意它会有点时间下沉。

是/否/取决于你的第二个。如果您的游戏范围很小,脚本编写并不重要。如果你单独这样做,脚本编写就不那么重要了。

您选择的是您所知道的或您的引擎将支持什么(或您购买哪些引擎工具来支持)。 Lua很受欢迎,但即使是手动滚动的脚本也可以使用。它更多的是将数据从代码和设计类型工作与工程师类型的工作分离。

您的上述要点适用。脚本使非编码员不受代码限制,并允许团队中的任何人轻松更改应该在代码中的数据相关内容。脚本也可以作为一种非常高级的语言,允许以受控方式进行大量游戏级别更改,如果置于代码中,将会看起来很丑陋。我个人致力于完成两种方式的游戏。脚本游戏在游戏周期结束时更容易维护 - 如果脚本支持代码成熟并且已经运行了一些调试周期。新的脚本支持代码比直接编码更难调试,因为有更多可能的失败点。没有脚本编码的游戏往往会更快地完成触摸,但需要更多的程序员/工程师时间,这意味着事物的整体范围必须限制在预算之内。

我会说精心设计的脚本和整体游戏系统总能胜过直接编码。查看Unity,了解如何将脚本和代码以及其他所有内容耦合到一个允许非常快速的游戏开发的光滑界面中。

答案 2 :(得分:4)

  

我应该在游戏中使用什么脚本?为什么?

你引用的理由很好。您可能需要了解的一件事是,大多数专业游戏仍然使用C ++构建,如果代码库很大,它就不会灵活变化。因此,如果您使用C ++,您将需要脚本语言进行快速更改,以便根据您列出的原因允许这样做。

如果你不使用C ++,也许你使用的语言可以快速吸收变化,使脚本的主要目的不那么明显。例如,我不会在Flash或Python游戏中使用脚本语言。

  

如果我单独工作或与之合作,是否需要使用脚本语言?   程序员而不是Devs?

正如我之前的回答:这取决于变化的时间。认为游戏的核心规则很少会改变,但与关卡设计相关的所有内容都会尽快测试。如果你能用游戏的编程语言来做,为什么要这么麻烦?如果你做不到,那么加速变革整合的任何方式都会付出代价。

  

如果我要制作,我应该使用哪种脚本语言   平台游戏,角色扮演游戏,或者你有什么?

坦率地说,没有任何解决方案可以解决任何问题。我个人使用Falcon和ChaiScript,Lua是众所周知的,但任何可以与你的游戏编程一起使用的脚本语言都可以。这是一个已经被问过的问题,如果你有疑问,只需选择Lua,因为它是游戏中最常见的。

答案 3 :(得分:2)

我会给你一个简短的答案。脚本主要用于在游戏仍在运行时更改内容,您可以更快地编辑内容。这比重新编译,重新加载资产,转到游戏中的特定点,激活某些条件(项目,按特定顺序与人交谈等)要好得多。

在脚本中完成的事情是角色演讲,NPC与触发器的交互(例如,走路到某个地方停下来与另一个NPC交谈,然后在某处运行,脚本用于计时),触发器或一般事件和敌人统计数据(健康,速度) ,准确性,有时是所述角色的逻辑)。

答案 4 :(得分:2)

您列出的原因都是在游戏中使用脚本语言的正当理由。我还会添加另一个原因:不同的语言更适合不同类型的编程任务,高级脚本语言允许您使用可能比C ++更适合的语言编写游戏的某些部分。

C ++广泛应用于游戏的主要原因是性能,轻松访问低级本机API或硬件(在游戏机上)和惯性 - 大多数游戏都是用C ++编写的,因此大多数第三方库和游戏中间件都是用C ++编写的并且最容易与C ++接口。对于许多任务而言,Python,C#或Ruby等更高级别的语言比C ++具有程序员生产力优势,这可能超过C ++对非性能关键或不必与本机API接口的代码的优势。

精心设计的C ++游戏引擎具有高级脚本语言,可以为您提供两全其美的优势 - 最需要的C ++的性能和低级别访问以及最需要的高级语言的生产力优势

答案 5 :(得分:1)

事实上,几乎所有的MMORPG游戏服务器都是用脚本编写的。

所有的C ++ engin都会嵌入一个用于逻辑处理的脚本语言,lua是一种适合它的脚本语言。

在bigworld中,python是默认的嵌入语言。

node.js也是游戏服务器编程的理想选择。因为它的网络能力更强。 node.js中有一个开源框架: https://github.com/NetEase/pomelo/

答案 6 :(得分:1)

I've found it unhelpful to use scripts, both when I was employed in a large game studio and in my work as an indie developer. On the other hand I have friends who've used professional-grade, modern engines with scripting technology successfully. As you're doing indie game development on your own (or in a small team), I think you should avoid it. The main reasons are:

  • It adds overhead pretty much everywhere: one more language to master (per developer in the team), performance is slower than native, and the API the weakest link which means you often need to rebuild the binary anyway.
  • The only real gain with a higher-level language is less development hours up front (if you're using a mature engine), but in my experience that time is eaten up by time-consuming bug-smashing in the end.
  • Many game scripting languages uses dynamic typing (Lua, Stackless Python, Pawn), which I find error-prone compared to statically typed languages. If you too feel it's only good for simple things, you might as well do it natively instead.

As a side-note I do find game scripting languages exceptionally useful, but only for quick-hack/prototype apps, not for huge components within games. See my answer here.

答案 7 :(得分:0)

我不相信你自己编写的游戏的脚本界面非常有用。我曾经在Freeciv上做了一些工作,并且使用脚本界面进行了“modding”。一个似乎很少使用的功能。我认为inner platform effect存在危险。您不需要脚本语言来自定义您的游戏:您已经拥有了一个非常好的编程语言(在您的情况下为C ++)。这是一个WTF

答案 8 :(得分:0)

  

我应该在游戏中使用什么脚本?为什么?

正如大家(包括你)所说,脚本使您的游戏更容易编辑。在一个更大的团队中,脚本编写也具有非常好的生产效率:技术娴熟的人可以继续改进引擎,而创意人员可以在实际游戏中工作,而且两个团队不必互相帮助

  

如果我独自工作或与程序员一起工作而不是Devs,我是否需要使用脚本语言?

你不需要它,并且根据你的最终目标,实际编写脚本实际上可能是浪费时间。我还开发了一个2D脚本游戏atm;我独自一人,但我也把它作为个人挑战,也因为我希望游戏很容易修改。

  

如果我要制作平台游戏,角色扮演游戏或者有什么东西,我应该使用哪种脚本语言?

最受欢迎的两个选项是Lua和Python。大多数人推荐Lua,因为它稍快一些。我使用Python是因为它具有(本机)对类的支持 - 这与我现有的C ++架构兼容 - 而且因为我发现它是一种更有趣的语言。

答案 9 :(得分:0)

好的,我知道这有点死了,但我不得不说。没有脚本就没有编程这样的东西。老实说,无论你是否自己写这些都没关系,事实上,有人写了那些脚本。和ruby一样,为了使用它,你需要一个像记事本+这样的程序来设置它,或者来自enterbrain的任何基于计算机的RPG Maker使用一种形式的ruby来操作。喜欢与否,当使用计算机设计游戏时,学会编写脚本。至于语言,看看一些并尝试不同的语言。使用预编译引擎并不便宜,只需从头开始工作。相信我,你会变得更好。我仍在尝试决定哪个更好,Lua(C ++)或Ruby。我可能只使用纯C ++