Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 脚本语言在游戏编程中的作用_C++_Scripting - Fatal编程技术网

C++ 脚本语言在游戏编程中的作用

C++ 脚本语言在游戏编程中的作用,c++,scripting,C++,Scripting,所以我在工作中遇到了一场关于脚本语言在游戏开发中应该扮演什么角色的辩论。据我所知,在这方面有两种观点: 1) 脚本语言功能强大,功能齐全。游戏代码的大部分是用语言编写的,代码只有在性能要求时才被移动到C++中。这通常类似于Lua或Unrealscript 2) 这种脚本语言非常有限。几乎所有的游戏代码都是C++语言,只有语言才能把底层的功能暴露给设计者。 我的挫败感来自于看到第二种方法经常被滥用,用一种语言实现的大型系统没有使代码可维护的特性 所以我开始支持第一种方法,但在与一些设计师交谈后,我

所以我在工作中遇到了一场关于脚本语言在游戏开发中应该扮演什么角色的辩论。据我所知,在这方面有两种观点:

1) 脚本语言功能强大,功能齐全。游戏代码的大部分是用语言编写的,代码只有在性能要求时才被移动到C++中。这通常类似于Lua或Unrealscript

2) 这种脚本语言非常有限。几乎所有的游戏代码都是C++语言,只有语言才能把底层的功能暴露给设计者。 我的挫败感来自于看到第二种方法经常被滥用,用一种语言实现的大型系统没有使代码可维护的特性

所以我开始支持第一种方法,但在与一些设计师交谈后,我意识到他们中的许多人似乎更喜欢第二种方法,而大多数程序员更喜欢第二种方法


所以我仍然在想哪种方法更好。我只是看到了糟糕的代码并责怪工具而不是程序员,还是我们真的需要一个更复杂的工具

>我真的不能看到大量脚本代码要优于大量C++的说法。人们可以提出相反的论点。我见过用脚本语言编写的可怕的大型项目,它们都是从脚本思维开始的——快速完成任务。不幸的是,这不能很好地扩展。完全基于编程语言的代码质量参数是不可能的。人们可以用任何语言编写大量可维护的代码,不管是编译的还是脚本编写的

无论如何,如果不知道性能瓶颈在哪里以及用户最想“编写脚本”,就不可能知道“方法1”和“方法2”之间的界限

我建议一个“方法3”,它是在C++中全部或部分地进行,并在C++中公开一个干净的SDK。这样做的好处是,可以强制您编写代码,就好像它是组织外的人必须使用的用户界面一样。它有望使它更易于维护,并为您实现脚本接口带来额外的副作用。您的脚本接口现在需要做的就是转发给您的SDK。中提琴


使用这种方法,你就不必在“脚本”和C++中的某个领域之间划一条线。您和您的用户可以选择在C++中使用SDK或使用脚本语言添加功能。

像往常一样,我认为答案是“取决于”。 《光环3》或《使命召唤4》不可能主要基于脚本。根据定义,顶级AAA头衔必须超越他们接触的任何平台。这不能用脚本来完成

然而,休闲游戏则是另一回事。主要的游戏元素如Unity有很多内置的脚本

mods也有市场。一个具有良好脚本环境的坚实的游戏引擎可以成为调整、衍生以及在某些情况下全新游戏的平台。反击是我个人最喜欢的例子。我认为在这种情况下,你只能玩FPS跑步和持枪游戏


因此,脚本在游戏中有一席之地,但它可能会停留在小型/休闲游戏和modder的空间中。

我认为你想要的平衡是这样的:你想要脚本中的游戏逻辑,但代码中的游戏功能

脚本的一大优点是可以轻松设置等待。例如:

敌人=从场景获取对象(“enemy01”); 5秒后{敌方.ThrowGrenadeAt(玩家);}

这只是一个做作的例子。在C++中安装这种逻辑会很烦人。脚本可以使这种逻辑更容易表达,但是您希望实际的功能(它调用的函数)是C++的。
而且脚本不必太慢。游戏机上有大量以60 fps速度运行的脚本化游戏,但它需要良好的设计,并在上面的选项1和选项2之间找到正确的平衡。

游戏开发社区已经将脚本作为构建用户界面和调整AI响应的一种非常常见的方法。你可以在像Gamasutra这样的网站上找到很多信息。有趣的是,标准语言正开始取代自定义解释器

AAA游戏中两个最好的脚本例子是魔兽世界(使用Lua)和EvE Online(使用Python)。EvE也在服务器端使用脚本:他们在无堆栈Python上有大量投资


更新:由于多核,性能基本上不会成为问题。即使是低端机器最终也会拥有比显示器和型号更新所需更多的内核。您不妨使用其中一个核心运行UI脚本解决方案。

我认为设计师需要找到适合他们的语言。这是不可谈判的:他们必须花时间设计,而不是编程

如果脚本可以快速开发出符合产品要求的游戏代码,那么程序员也应该这样做。但它必须有产品价值:每件事做两次并不能节省时间。因此,您必须保持脚本编写的位置。如果开发人员可以在一周内编写清单系统,或者在一个月内以C++编写,那么你需要全功能脚本,如果只是给你更多的时间来优化可能会达到性能极限的部分。所以不是库存,或者高分表,或者关键映射系统,或者像角色应该做的那样的高级游戏逻辑。如果这样做可以节省您在加速图形和物理方面的时间,那么所有这些都可以编写脚本:程序员需要能够准确地计算出瓶颈是什么,高级程序员可以合理地预测哪些瓶颈不会出现