2013-02-21 111 views
0

嗨,大家好我开始了一个新的小游戏引擎的设计,我假设游戏引擎是一个DLL,然后为使用这个DLL并输出一个EXE文件的游戏构建一个项目。游戏引擎作为EXE和游戏作为DLL?

但后来我阅读了最新的ID技术游戏引擎,以及他们如何以相反的方式进行操作。 (http://fabiensanglard.net/doom3/index.php

这不是真的解释为什么。我觉得它与modding有关,因为在发动机(EXE)是封闭源的情况下,只有游戏(在这种情况下,DLL)向公众开放了很长一段时间。

但我想知道是否有其他原因。

由于我知道DLL项目应该有所有可重用的代码。正常的项目应该是应用程序,它会引用可重用的DLL。通过这种方式,您可以在DLL项目中构建一个可用于其他任何未来项目的框架。

我能想到的另一个唯一原因是,AFAIK只有DLL的名字被记录在程序文件中,没有文本或数据,所以如果游戏可能比引擎大,它可以使可执行文件的大小更小。

[编辑]

我已经想到了另一个理由,它是这样的:发动机是一个EXE所以它可能是,它可能没有一个游戏DLL使用吗?像CAD或脚本等工具一样?

回答

1

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

如果你有一个通用的环境加载元素来定制它的行为,从而使它成为一个特定的游戏,那么你有一个EXE和零个或多个DLL的环境,它使用配置来加载各种DLL和配置文件来确定它行为。

要么你很容易,你可能应用程序中有两个以上的程序集。

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

+0

是的,我确实知道。例如Stefan Zerbst的“3D游戏引擎编程”深入探讨了为每个模块使用不同的DLL。但它将游戏作为把所有东西放在一起的核心部分。这就是为什么我问是否有引擎的隐藏原因(在IDTech4的情况下,“引擎”是除了进入不同DLL的图形模块之外的所有东西)是中心部分(EXE文件),并将游戏加载为一个DLL。 – 2013-02-21 13:48:17

+0

建立一个通用的游戏环境,根据模块和配置变成一个特定的游戏,除了编写使用其他模块的游戏之外,不能轻易地被其他游戏重复使用。 – 2013-02-21 14:06:30

+0

你能举个例子吗?我相信你可以使用模块实现相同的通用游戏环境。 – 2013-02-22 11:36:19