球拍作为游戏引擎中的脚本语言

Iva*_*kin 6 c++ dll scheme game-engine racket

我想为我的C++游戏引擎添加脚本功能.

我有Engine.exe,Physics.dll,Audio.dll和我加入Scripting.dll这是一个高层次的球拍包装.

Engine.exe加载Physics.dll和设置物理世界,加载Audio.dll和设置音频世界.它应该加载Scripting.dll,以绑定成立Physics.dll,Audio.dll并加载游戏脚本.

AFAIK有两种方法可以将Racket嵌入到C++程序中:

使用外部接口,由于需要加载似乎离奇Physics.dll,Audio.dll两次:第一次从Engine.exe,然后从游戏脚本.

编写扩展名看起来更具吸引力,因为它允许在C++端进行脚本绑定.另一方面,你必须构建你的扩展raco ctool,链接它与mzdyn目标文件 - 这看起来也很尴尬:为什么不建立mzdyn一个静态库?

我想实现一个方法,例如setupScriptBindings(),在in Physics.dll和in中Audio.dll,并Engine.exe在启动时调用它.

有一种直截了当的方法吗?

Dan*_*n L 3

在使用了将 Racket 连接到 C 代码的扩展方法和 FFI 方法之后,我不得不说 FFI 方法要好得多。Racket 中与 C 函数的绑定是明确且健壮的,并且在 Racket 中处理 C 类型非常好。使用 FFI 方法的唯一缺点是,据我所知,您的 Racket 程序必须是驱动程序应用程序。

使用嵌入方法,您的 C/C++ 可执行文件就是驱动程序,但使用 Racket 代码声明接口更加手动且容易出错。更不用说您必须找出 raco ctool 并复制它,或者让球拍的构建系统接管您的系统。为了我们的目的,我们最终提取了 Racket 源代码并自己构建它。我真的不推荐这种方法。

最终,出于我的目的,让我的应用程序成为一个带有外部 .DLL/.so 文件的 Racket 应用程序,为 C 函数加载该文件效果最好,但听起来您可能会陷入嵌入方法。

  • 我们将使用纯文本或字节码。字节码明显更快,但您必须注意它是否已更新或 Racket 在必要时对其进行编译。 (2认同)
  • 我们的本机 <-> 脚本绑定看起来就像文档中的示例......没什么特别的。 (2认同)