gpt4 book ai didi

c++ - Racket 作为游戏引擎中的脚本语言

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:11 26 4
gpt4 key购买 nike

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

我有 Engine.exePhysics.dllAudio.dll,我正在添加 Scripting.dll 是高级 Racket 包装器。

Engine.exe加载Physics.dll并设置物理世界,加载Audio.dll并设置音频世界。它应该加载 Scripting.dll,设置与 Physics.dllAudio.dll 的绑定(bind)并加载游戏脚本。

据我所知,有两种可能的方法可以将 Racket 嵌入到 C++ 程序中:

使用 Foreign Interface由于需要加载 Physics.dllAudio.dll 两次,所以看起来很奇怪:第一次是从 Engine.exe,然后是游戏脚本。

写作 Extensions看起来更有吸引力,因为它允许在 C++ 端进行脚本绑定(bind)。另一方面,您必须使用 raco ctool 构建您的扩展,将其与 mzdyn 目标文件链接——这看起来也很尴尬:为什么不制作 mzdyn 一个静态库?

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

有没有简单的方法来做到这一点?

最佳答案

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

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

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

关于c++ - Racket 作为游戏引擎中的脚本语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32738430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com