如何开发游戏引擎而又不会因为编译而浪费太多时间

问题描述 投票:0回答:1

我现在正在用 C++ 编写一个游戏引擎。我的组织是你能想象到的最糟糕的(或者可能更糟),我用一个构建命令和一个 .cpp 文件构建整个引擎。构建大约需要 21 秒,这对于我只是想在某个地方调整一个值的时候来说太长了。

我组织了我的代码,所以有几个 .h 和 .cpp 文件,就像人们通常做的那样。所以现在我使用g++为每个.cpp文件生成.o文件,然后将它们一起编译成可执行文件。因此,出于某些抽象原因,这可能很好,但速度并不快。编译大约需要21秒。使用“-O0”可以节省一秒钟。我真的认为这会节省时间,现在集成单独的 .o 文件会非常快,因此不必将最大的 .cpp 重建为 .o 文件会节省我很多时间,但似乎事实并非如此完全没有。

对于初学者来说,该程序可以从文本文件中读取值,因此,如果有一个敌人的健康状况(或技术价值更高)需要调整,则可以免费更改,而无需重新编译引擎。这很酷,但它并不是真正免费的,因为随着开发的进行,我必须添加代码来读取这些值,所以这并不能真正解决问题,但它很好。

从磁盘读取值的扩展是以脚本的形式从磁盘读取执行 - 这会导致每帧调用一次脚本的实体速度变慢 - 因此一种潜在的途径是编写多线程脚本解释。如果执行起来不是那么慢的话,这将会解决问题。

我知道对于一个非常庞大的项目,可能需要几个小时才能在令人惊叹的硬件上编译,不同的部分可以分为不同的 main() 函数和不同的可执行文件 - 尽管这对于面向消费者的程序来说并不是很棒,但我可以看到这种方法可能适用于共享内存。

回到游戏引擎,不知何故,虚幻引擎没有这些问题。她可以编写五百行代码,在一秒钟内编译它,然后单击一个按钮,我想,将该代码与她的游戏中的所有其余代码集成。但当最终需要构建游戏时,它花费的时间与我预期的一样长,甚至可能是十二分钟。

那么,我有两个问题。

现代游戏引擎如何做到两全其美?

如果程序员在对游戏中运行的任何指令进行每次更改后都必须花费 30 秒进行编译,他们如何在两年半的时间内完成《时之笛》?

c++ game-engine
1个回答
0
投票

有多种方法可以加快编译时间。他们中的大多数使用某种增量构建设置。目前,您正在终端中使用

g++
命令。这迫使编译器构建并链接每个文件。使用类似
make
cmake
的内容。它将编排构建过程,以便仅构建您已更改的文件。第一次构建代码时,所有内容都会被构建,但后续构建将会快得多。在 Windows 上,免费的 Visual Studio 社区版也提供相同的功能。

© www.soinside.com 2019 - 2024. All rights reserved.