游戏引擎作为 EXE 和游戏作为 DLL?
Posted
技术标签:
【中文标题】游戏引擎作为 EXE 和游戏作为 DLL?【英文标题】:Game Engine as EXE and Game as DLL? 【发布时间】:2013-02-21 00:00:29 【问题描述】:大家好,我开始设计一个新的小游戏引擎,我假设游戏引擎是一个 DLL,然后为游戏构建一个项目,该项目将使用这个 DLL 并输出一个 EXE 文件。
但后来我读到了最新的 ID Tech 游戏引擎,以及他们是如何反其道而行之的。 (http://fabiensanglard.net/doom3/index.php)
这并没有真正解释为什么。我觉得这与修改有关,因为只有游戏(在本例中为 DLL)向公众开放了很长一段时间,而引擎 (EXE) 是封闭源代码。
但我想知道是否还有其他原因。
据我所知,DLL 项目应该包含所有可重用的代码。正常项目应该是引用可重用 DLL 的应用程序。通过这种方式,您可以在 DLL 项目中构建一个可用于任何其他未来项目的框架。
我能想到的另一个唯一原因是 AFAIK 仅将 DLL 的名称记录在程序文件中,没有文本或数据,因此如果游戏可能比引擎大,它可能会使可执行文件的大小更小。
[编辑]
我想到了另一个原因:引擎是一个 EXE,所以它可以在没有游戏 DLL 的情况下使用吗?喜欢 CAD 或脚本等工具?
【问题讨论】:
【参考方案1】:如果您在应用程序中使用库,例如一个游戏,那么你有一个应用程序,其 EXE 具有零个或多个自己的 DLL,消耗具有一个或多个 DLL 的库。
如果您有一个通用环境加载自定义其行为的元素,从而使其成为一个特定的游戏,那么您就有一个带有 EXE 和零个或多个 DLL 的环境,它使用配置来加载各种 DLL 和配置文件以确定其行为.
这很简单,您的应用程序中可能应该有两个以上的程序集。
例如一个(EXE)用于加载主要配置和模块并将它们全部连接起来,一个用于主 UI,一个用于图形,一个用于物理,一个用于 AI 等等。
【讨论】:
是的,我知道。例如,Stefan Zerbst 的“3d 游戏引擎编程”深入研究了每个模块使用不同的 DLL。但它以游戏为核心,将一切结合在一起。这就是为什么我问是否有隐藏的原因让引擎(在 IDTech4 的情况下,“引擎”是除图形模块之外的所有东西,它位于不同的 DLL 中)作为中心部分(EXE 文件)并将游戏加载为一个 DLL。 构建一个通用的游戏环境,根据模块和配置变成一个特定的游戏,这不仅仅是编写一个使用其他模块的游戏,并且不能轻易地用于其他游戏。 你能举个例子吗?我相信您可以使用模块实现相同的通用游戏环境。 查找复合应用架构。以上是关于游戏引擎作为 EXE 和游戏作为 DLL?的主要内容,如果未能解决你的问题,请参考以下文章