【问题标题】:Game Engine as EXE and Game as DLL?游戏引擎作为 EXE 和游戏作为 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 或脚本等工具?

【问题讨论】:

    标签: dll exe game-engine


    【解决方案1】:

    如果您在应用程序中使用库,例如一个游戏,那么你有一个应用程序,其 EXE 具有零个或多个自己的 DLL,消耗具有一个或多个 DLL 的库。

    如果您有一个通用环境加载自定义其行为的元素,从而使其成为一个特定的游戏,那么您就有一个带有 EXE 和零个或多个 DLL 的环境,它使用配置来加载各种 DLL 和配置文件以确定其行为.

    这很简单,您的应用程序中可能应该有两个以上的程序集。

    例如一个(EXE)用于加载主要配置和模块并将它们全部连接起来,一个用于主 UI,一个用于图形,一个用于物理,一个用于 AI 等等。

    【讨论】:

    • 是的,我知道。例如,Stefan Zerbst 的“3d 游戏引擎编程”深入研究了每个模块使用不同的 DLL。但它以游戏为核心,将一切结合在一起。这就是为什么我问是否有隐藏的原因让引擎(在 IDTech4 的情况下,“引擎”是除图形模块之外的所有东西,它位于不同的 DLL 中)作为中心部分(EXE 文件)并将游戏加载为一个 DLL。
    • 构建一个通用的游戏环境,根据模块和配置变成一个特定的游戏,这不仅仅是编写一个使用其他模块的游戏,并且不能轻易地用于其他游戏。
    • 你能举个例子吗?我相信您可以使用模块实现相同的通用游戏环境。
    • 查找复合应用架构。
    猜你喜欢
    • 2012-11-27
    • 2014-06-13
    • 2021-04-09
    • 2018-07-02
    • 2020-01-17
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多