2

我用 C# 制作了一个简单的游戏引擎(在 VB 2008 中,主要是为了我自己)。有一个主要的应用程序来处理图形和其他东西,来自实际游戏的大部分数据都将保存在一个 dll 中,该 dll 由我提供给游戏设计师的工具生成。

我听说过很多关于 C# 非常适合编写脚本的消息(而且看起来它比任何其他方式都更适合我的需求),但我真的找不到确切的答案。我遇到了这个问题:

我显然不想提供主 exe 的源代码,但它将包含脚本所需的所有主要方法(因为它们作用于主 exe)。

如果没有定义将在父 exe 中调用的方法,如何生成 dll?主 exe 将 dll 作为使用它的依赖项。这意味着 dll 不能依赖会导致循环的 exe。

我可以创建另一个 exe 和库都将使用的 dll,但是其中的方法将无法直接作用于使用它的主 exe。

我想出的唯一合乎逻辑的解决方案是:

  • 一个包含我需要的类的骨架的 dll。
  • 包含游戏数据的 dll。这将有一个从 dll A 继承的类。
  • Exe 依赖于 A 和 B。它将覆盖 B 中的 A 方法以使其表现出应有的方式。

不过,这似乎不太优雅。

在我累得无法进一步阅读之前,我在研究中看到了很多单词(MAF、MEF、Roslyn 等)。我一个人就花了几个小时。

在你看来,我应该怎么做呢?有什么我忽略的吗?

4

2 回答 2

1

我不知道您在哪里听说 C# 非常适合编写脚本。Rosyln 的半生不熟的尝试并不是真正的“脚本”。

为什么不尝试其中一种 DLR 语言——比如 IronPython 和 IronRuby?

还有 .NET 的 Lua 绑定。如今,大多数游戏开发人员都在 Lua 中编写脚本。因此,如果您打算将其封闭源代码,那么模组社区肯定会喜欢您的游戏引擎。

于 2013-03-17T04:23:46.200 回答
0

听起来您正在混合通过 dlls 的可扩展性和通过scripting的可扩展性。

让我们首先采用 dll 方法。

实现这一点的标准方法与您概述的非常接近:

  1. 有一个interfaces.dll
  2. 您的入口点 dll 将依赖于interfaces.dll
  3. 扩展 dll 将依赖于interfaces.dll
  4. 在运行时,要扩展 main,扫描意图 dll 中实现所需接口的类,根据需要interfaces.dll调用方法。

对于脚本,您通常需要使用脚本语言 - powershell 在 .Net 中很流行,还有一些 JavaScript 实验

于 2013-03-17T04:29:59.450 回答