【问题标题】:General game (RTS) scripting basics通用游戏 (RTS) 脚本基础知识
【发布时间】:2011-12-08 11:25:36
【问题描述】:

我已经阅读了一些关于如何将脚本集成到游戏中的教程和链接——但对我来说,其中大部分都没有足够早地开始。我试图围绕一个有效脚本游戏的基本结构。以下是基础知识:

我正在用 C++ 开始一个基本的 2d RTS 游戏。游戏的机制和图形非常标准/简单,但与标准 RTS 相比,逻辑和数据将非常复杂。显然,我有很多计划要做——实际上,这样做的目的更多是学习 C++、脚本、游戏编程基础知识,而不是真正完成我的项目。

我正试图弄清楚我的项目中哪些元素应该由脚本处理,哪些应该包含在我的核心“游戏引擎”中。

例如,功能强大的“游戏循环”——我是在 C++ 中将其编程为引擎的一部分,还是我的“引擎”仅用于显示图形(图块、字符等... )、处理大量数据和类似任务——这些类被“插入”到脚本化的游戏循环中?

我想使用 C# 作为脚本语言,据我所读,它提供了良好的速度,同时仍然允许在 VS 中进行开发,这是我喜欢的。但实际上,我更关心它应该如何设置,更多的是从伪代码级别而不是实际编码。当我到达这一点时,我可以使用大量资源,我只是在寻找有关如何构建整个事情的建议。

任何教程、资源、建议将不胜感激!谢谢!

【问题讨论】:

标签: c++ loops scripting


【解决方案1】:

icnivad 推荐的 Programming Game AI by Example 非常棒,里面塞满了实用信息。

就实际引擎而言,Unity 可以完成这项工作,并让您使用 C# 编写脚本,但是对于像您这样想要学习具体细节的人来说,它可能隐藏得太多,为您做的太多. Irrlicht 是一个非常可靠的 C++ 引擎,并带有很多 tutorials 来帮助您入门;它还有一个非常清晰的界面和一个非常活跃的社区。就你想用 C++ 编写什么以及你想编写什么脚本而言,我建议仔细研究一下你实际上需要编写什么脚本——如果你需要编写任何脚本的话。你可以用 C++ 编写整个东西,它的优点是更容易调试。说到这一点,如果您还是 C++ 和游戏开发的新手,您可能希望一开始只使用 C++(如果不是,请忽略这一点)。

“可调试性”是您应该注意的事情之一,因为通常很难同时调试 C++ 和脚本代码(当您来回传输数据和指令时)。也就是说,一旦您的框架启动并运行,实现新功能和调整内容就变得轻而易举。

您可能希望将 Lua 视为一种脚本语言,因为它在游戏脚本中非常流行。 Luabind 是一个流行的 C++ 和 Lua 绑定库,非常易于使用。 SWIG 也可用(最近在 GameDev.net 的博客上弹出了一个简短的 tutorial)。

无论您选择哪种脚本语言(如果有),请确保您首先使用它们处理一些单独的玩具程序。习惯这种语言并摆弄它。然后尝试使用最少的 C++ 脚本互操作的小程序。一次只执行几个步骤,这样您就可以发现错误并注意哪些有效,哪些无效。一旦您准备好开始将脚本集成到您的游戏中,请一次只做一步,并在继续之前对其进行测试。说到这一点,请确保您还计划了将脚本连接到纸上游戏的方式和位置——这会让事情变得更容易。

通常,您会希望将所有繁重的工作都放在 C++ 的肩上(例如游戏循环、图形、寻路等)。我发现脚本通常最适合用于配置文件、AI 角色的行为代码、UI 和事件处理等内容。基本上,如果您要对某些内容进行大量调整/更改,或者您希望其他人能够更改某些内容,那么它是脚本的候选者(无需重新编译即可获胜!)。请记住,这在很大程度上取决于您的特定游戏——如果编写脚本太慢(使用您的分析器检查)、太麻烦等,不要害怕在 C++ 中执行它并从脚本中调用它或完全用 C++ 完成。

希望有帮助!

【讨论】:

  • 谢谢——这正是我所需要的。幸运的是,我不是白手起家——我在 C#、Java 和 OOP 方面拥有扎实的编程经验,我只是想在此之后在 C++ 上有一个良好的开端。你的回答很有道理,解决了我的很多问题。谢谢!
【解决方案2】:

Programming Game AI By Example 这本书非常棒,它触及了您正在寻找的关于游戏循环、使用脚本(如 LUA)以及似乎与您特别相关的大量示例。

顺便说一句,可能相关的是 Unity3D 游戏引擎,它允许您使用 C# 编写脚本。还有 Garage Games 引擎,包括 game builder kits 可以帮助您创建 RTS 类型的游戏,我相信您也可以使用 C# 为 Torque 编写代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 2017-03-03
    • 1970-01-01
    • 2012-12-22
    • 2011-03-09
    • 2020-01-17
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多