【问题标题】:Scripting languages and Game Dev/Programming脚本语言和游戏开发/编程
【发布时间】:2011-11-18 01:19:30
【问题描述】:

好的,所以我开始涉足 2D 游戏开发/编程,我见过的许多游戏也使用某种脚本语言。所以我想知道 - 在游戏中使用脚本的目的是什么?我知道没有一个简单的原因答案,我一直在尝试考虑所有可能性。以下是我目前所知道的“想法”:

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

2) 脚本更易于非程序员使用。

3) 脚本允许我将引擎与游戏本身分开,从而让我更快地制作具有相同组件的其他游戏?

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

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

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

基本上,我想知道:

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

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

如果我要制作平台游戏、角色扮演游戏或其他游戏,我“应该”使用哪种脚本语言?

【问题讨论】:

  • “如果我使用脚本,那不是允许最终用户编辑游戏机制吗?”这应该是坏事?还有,程序员和“开发者”有什么区别?
  • 我建议将其拆分为不同的问题。
  • 我觉得你在“游戏开发”下面的链接发帖比较合适:http://gamedev.stackexchange.com/
  • 它们都很相似,以至于我的答案重叠。我会留下它。
  • gamedev.stackexchange 上有许多类似的问题,您可能也会感兴趣:Hereherehere

标签: c++


【解决方案1】:

您的前 3 个理由都是 100% 正确的,并且是在游戏引擎中使用脚本语言的主要原因。

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

我应该在我的游戏中使用脚本做什么?为什么? 资源加载,暴露特性/类型,即对于我们的游戏引擎(用 c++ 编写),我们有一个基础关卡,然后从它继承了许多不同类型的关卡,例如波浪关卡、死亡竞赛等。用户只需在脚本中说明他们需要什么类型的关卡,然后在这里也插入资产。在我的演示中,我们有;

Level="wavelevel"

--等级初始敌人数量

EnemyNumbers="3"

--级别总波数

WaveNumbers="4"

--波浪系数

WaveCoeff="1.1"

--地形大小

地形大小="256"

--地形文件

TerrainFile="resource/Models/mountainous.raw"

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

如您所见,它会加载一些资源并确定关卡类型

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

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

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

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

如果我要制作平台游戏、角色扮演游戏或其他游戏,我“应该”使用哪种脚本语言?

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

希望这是对您有用的信息。

【讨论】:

  • 似乎所有 *pointers 都在暗示 Lua,我很可能会用它来加载资产。感谢您的帮助。
  • 别担心!祝你好运,我希望你一切顺利。
  • 请不要说“LUA”,这会让人困惑。按照他们网站的建议说“Lua”。
【解决方案2】:

老实说,这听起来像是你第一次尝试游戏,你甚至不应该担心这种事情。相反,我更担心将您的项目范围缩小到您有雪球实际完成某事的机会的水平。如果您还没有做过井字游戏或乒乓球级别的事情,请先做。你在那里学到的东西比担心脚本语言更有价值。

哦,如果您将 RPG 作为您对游戏的第一次尝试。别。即使对于拥有很多很多可用资源的专业开发人员来说,它们也是迄今为止最难做的游戏。保持简单,并将其用作学习体验。

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

是/否/取决于你的第二个。如果您的游戏范围很小,那么脚本就不那么重要了。如果你自己做这件事,脚本就没有那么重要了。

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

您的上述初始点适用。脚本使非编码人员远离代码,并允许团队中的任何人轻松更改本来应该在代码中的数据相关内容。脚本还充当一种非常高级的语言,允许以受控方式进行大量游戏关卡更改,如果放置在代码中,这些更改会/看起来很难看。我亲自参与过双向完成的游戏。脚本游戏在游戏周期结束时更容易维护 - 如果脚本支持代码成熟并且已经运行了一些调试周期。新的脚本支持代码比直接编码更难调试,因为有更多可能的故障点。没有脚本编码的游戏往往会更快地完成,但需要更多的程序员/工程师时间,这意味着必须限制事情的整体范围以保持预算。

我会说,精心设计的脚本和整体游戏系统将永远胜过直接编码。查看 Unity 示例,了解如何将脚本和代码以及其他所有内容耦合到一个流畅的界面中,从而实现非常快速的游戏开发。

【讨论】:

  • 这实际上是我第一次“摆脱”像乒乓球和 SHUMPS 这样的简单游戏,我终于决定更上一层楼,这就是为什么我想找到知道 abt 脚本的原因游戏。我计划制作一个简单的平台游戏并从那里开始工作。感谢您的建议,在尝试轻松进入更困难的游戏时,我会放慢速度。
【解决方案3】:

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

你引用的理由很好。您可能需要了解的一件事是,大多数专业游戏仍然是使用 C++ 构建的,如果代码库很大,那么它远非灵活更改。因此,如果您使用 C++,您将需要脚本语言在重要的地方根据您列出的原因进行快速更改。

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

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

正如我之前的回答:这取决于更改的时间。认为游戏的核心规则很少改变,但与关卡设计相关的一切都会,并且应该尽快进行测试。如果你能用游戏的编程语言做到这一点,何必呢?如果您不能,那么任何加速变更集成的方法都将得到回报。

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

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

【讨论】:

  • 我最近改用 C++,因为它“更快”并且更广泛地用于游戏制作。我会检查 Falcon 和 Chaiscript,我也会给 Lua 看看。感谢您的帮助。
【解决方案4】:

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

脚本中完成的事情是角色语音、NPC 与触发器的交互(例如走到某个地方停下来与另一个 NPC 交谈,然后跑到某个地方,脚本用于计时)、触发器或事件一般以及敌人的统计数据(健康、速度,准确性,有时是所述字符的逻辑)。

【讨论】:

  • 啊,我想我明白了。因此,将 C++ 用于静态功能,例如简单的向下重力;以及我可能会经常更改的动态方面的脚本,例如简单平台游戏中的可收集通电,对吗?
  • 你明白了;)。甚至可以在脚本中修改物理特性(物体移动的重量或移动量)。然而,在脚本语言中实现物理是一个禁忌。但通常游戏公司不会在脚本中做的唯一事情是繁重的循环(物理、读取数兆字节的文件数据和生成关卡数据)。如果你懒惰,在脚本中循环 AI 是可以的,因为除非你同时有 10k 个敌人,否则它不会对性能产生影响
  • 顺便说一句,你的游戏会有多大?据说如果你是独立开发者,你不需要也不应该使用引擎。所以基本上不要编写引擎,除非你的游戏将超过 80k 行代码。你可以直接使用 sdl/opengl/fmod/whatever
  • 有道理;谢谢您的帮助!而且我想为微调定义常量似乎也很明智,例如重力乘数或最大帧速率。我仍然处于一种学习过程中,为了体验而构建简单的游戏,所以我不能说;但最终我确实想努力制作 2D 角色扮演游戏。
【解决方案5】:

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

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

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

【讨论】:

    【解决方案6】:

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

    所有的 C++ 引擎都会嵌入一种脚本语言来进行逻辑处理,lua 是一种适合它的脚本语言。

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

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

    【讨论】:

      【解决方案7】:

      我发现使用脚本un很有帮助,无论是在我受雇于一家大型游戏工作室时还是在我作为独立开发者的工作中。另一方面,我有朋友成功地使用了专业级的现代引擎和脚本技术。当您自己(或在一个小团队中)进行独立游戏开发时,我认为您应该避免它。主要原因是:

      • 它几乎在所有地方都增加了开销:需要多掌握一种语言(团队中的每个开发人员),性能比原生语言慢,并且 API 是最薄弱的环节,这意味着您通常需要重新构建二进制文件。
      • 使用高级语言的唯一真正好处是减少了前期开发时间(如果您使用的是成熟的引擎),但根据我的经验,这些时间最终会被耗时的 bug 粉碎所消耗。
      • 许多游戏脚本语言使用动态类型(Lua、Stackless Python、Pawn),与静态类型语言相比,我发现它更容易出错。如果你也觉得它只适用于简单的事情,你不妨用原生来代替。

      作为旁注,我确实发现游戏脚本语言非常有用,但适用于快速破解/原型应用,而不适用于游戏中的大型组件。看我的回答here

      【讨论】:

        【解决方案8】:

        我不相信您自己编写的游戏的脚本界面会如此有用。我曾经在 Freeciv 上做过一些工作,并且在使用脚本界面启用“修改”方面付出了巨大的努力。一个似乎很少使用的功能。我认为inner platform effect 存在危险。你不需要脚本语言来定制你的游戏:你已经有了一个非常好的编程语言(在你的例子中是 C++)来做这件事。这是WTF

        【讨论】:

          【解决方案9】:

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

          正如每个人(包括您)所说,脚本使您的游戏更易于编辑。在更大的团队中,脚本也有很好的生产力效果:精通技术的人可以继续打磨引擎,而有创意的人可以在实际游戏中工作,两个团队不必互相妨碍.

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

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

          如果我要制作平台游戏、角色扮演游戏或其他游戏,我“应该”使用哪种脚本语言?

          最受欢迎的两个选项是 Lua 和 Python。大多数人推荐 Lua,因为它稍微快一些。我选择 Python 是因为它对类有(本机)支持——这与我现有的 C++ 架构配合得很好——而且我发现它是一种更令人愉快的语言。

          【讨论】:

          • @NightShade 另外,如果您选择 Python 作为脚本语言,您必须使用 Boost.Python 来嵌入它。您不想陷入使用 Python C API 的麻烦。 Boost.Python 几乎让技术上的事情变得微不足道。
          • 感谢您的信息,我选择 Python 或 Lua,我想我会试试看哪个更适合我。易于嵌入是我更关心的问题之一,因为我不是专业的 C++ 程序员,而且我已经跳过了安装和尝试不同游戏 API 的麻烦。
          【解决方案10】:

          好吧,我知道这有点死,但我不得不说。从字面上看,没有脚本就没有编程。老实说,您是否自己编写它们并不重要,事实上,有人编写了这些脚本。像ruby一样,为了使用它,你需要一个像notepad+这样的程序来设置它,或者enterbrain的任何基于计算机的RPG Maker都使用一种ruby形式来操作。不管你喜不喜欢,在用电脑设计游戏的时候,学会写脚本。现在至于语言,查一下并尝试不同的语言。使用预编译引擎不要便宜,只需从头开始工作。相信我,你会过得更好。我仍在尝试决定我更喜欢哪个,Lua(C++) 还是 Ruby。我可能只使用纯 C++

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-09-10
            • 2011-10-07
            • 1970-01-01
            • 1970-01-01
            • 2022-06-13
            • 1970-01-01
            • 2010-09-28
            相关资源
            最近更新 更多