如何在我的游戏中实现脚本?

Posted

技术标签:

【中文标题】如何在我的游戏中实现脚本?【英文标题】:How can I implement scripting in my game? 【发布时间】:2010-12-23 21:09:00 【问题描述】:

我正在尝试编写一个游戏并实现脚本,以便在以后的开发中当我想更改数字时不必重新编译所有内容。

我的问题是我不知道脚本应该如何与游戏交互。我使用的脚本语言是angelscript。

现在,我有一个状态:介绍状态,我用它来测试我的游戏“引擎”中的大多数模块(它更像是一个松散的类集合)。它将加载并绘制图片和绘制文本,并使用脚本更新自身,然后可能会切换到虚拟状态以测试状态管理器。

在编写它时,我意识到使用脚本进行大部分更新需要我 register most of my game engine's modules 使用脚本,并且几乎将大部分代码移动到脚本语言。就个人而言,我宁愿让 C++ 部分完成大部分工作,并让脚本语言提出要在公式/绘图/其他中使用的数字。

但是,如果我是对的,那么这样做将需要许多不同的更新模块来处理游戏中需要更新的大部分内容,并且要求它们都被加载,并且 C++代码必须单独运行每个更新函数。

或者,有一种方法可以实现我忽略的脚本和程序互操作性。无论哪种方式,有人可以帮我弄清楚在我的游戏中实现脚本的最佳方法是什么?

【问题讨论】:

感谢大家的帮助。我正在我的游戏引擎的所有部分中注册函数以允许 AngelScript 使用它们。即使我没有想到,我可能最终会在脚本中完成大部分非绘图逻辑。 【参考方案1】:

对于这么大的问题,真的没有正确的答案。你这样做的方式与在 C++ 中进行引擎/游戏逻辑分离的方式相同。定义一个脚本可以调用的 API,允许它做任何你想让它做的事情。使用脚本注册该 API 中的函数,并在 angelscript 中使用该 API。该 API 应该是什么完全取决于您的需求以及您希望赋予脚本编写者什么样的权力。

【讨论】:

【参考方案2】:

如果您希望 AngelCode(或您选择的任何其他脚本编写方法)只是“想出一些数字”,嘿,就这样使用它 - 例如,在 AngelCode 中,通过向它们公开单个 C++ 来编译脚本您的函数,例如“void ProvideNumberFor(string reason, number value)”,脚本将负责根据需要多次调用该函数以“提供数字”,仅此而已。

【讨论】:

【参考方案3】:

如果您查看真实示例,例如 Garry 的 mod 或使用 UnrealScript 编写的游戏,您会发现现代游戏中的相当多的逻辑都是在脚本中实现的。 C/C++ 代码最适合引擎的“静态”和容易出现瓶颈的部分,例如渲染器、物理引擎、低级网络等。脚本最适合内容(即游戏逻辑)。

旁白:最好的游戏脚本语言恕我直言是Lua。它提供了与 C/C++ 的轻松集成,文档齐全,并且为 javascript 用户所熟悉。

我正是为此目的使用了 Lua,它做得很好。查看所有games programmed using Lua.,而且速度非常快。

编辑:我没有完全阅读这个问题......对不起。这是我真正的答案;)

【讨论】:

我其实不太喜欢 lua...我尝试过使用它,但是语法——语言和 API——让我很恼火。我喜欢 AngelScript,因为它更容易集成并且具有 C/C++ 语法。另外,现在我考虑一下,我可能会按照您的建议在脚本中执行逻辑。感谢您的帮助。【参考方案4】:

如果您熟悉 Qt4/Javscript,您可以随时使用 QtScript http://qt.nokia.com/doc/4.5/qtscript.html

【讨论】:

以上是关于如何在我的游戏中实现脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity 中添加 Google Play 游戏注册脚本

试图在我的游戏中实现缩放功能,但它不会取消缩放

在 Windows 窗体中实现 gameloop [关闭]

在我的 Sprite-Kit 游戏中实现这个动作的正确方法是啥?

如何在Python中实现argparse

如何在我的 Web MVC 应用程序中实现访问控制列表?