gpt4 book ai didi

c++ - 在独立于平台的设计中传递特定于平台的数据?

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:57 25 4
gpt4 key购买 nike

我有一个用 C++ 编写的游戏引擎设计,其中平台无关的游戏对象包含在特定于平台的应用程序对象中。

我要解决的问题是我需要将特定于操作系统的数据从应用程序传递到游戏。在这种情况下,我需要将 Windows 的主要 HWND 传递给 DirectX 或其他平台的 OpenGL 上下文到我正在使用的渲染器。不幸的是,我无法控制渲染器,它可以期待特定于平台的数据。

我知道我可以在应用程序端初始化渲染器,但我宁愿让游戏决定何时何地进行初始化。通常,我可以控制应用程序端但不能控制游戏端。游戏编写者可能会选择使用不同的渲染器。

我也考虑过拥有某种“属性管理器”的想法,我可以在其中通过字符串传递数据,但我不太喜欢这个想法。

有什么想法吗?

最佳答案

请记住,您只需要在编译时知道目标平台。有了这些信息,您就可以为正确的平台“换入和换出”组件。

在一个好的设计中,游戏应该需要关于它的平台的任何信息;它应该只包含逻辑和相关组件。

您的“引擎”类应该考虑平台。

Game 类应该只通过不特定于平台的公共(public)函数与 Engine 对象交互;您可以为每个平台拥有多个版本的引擎对象,并在编译时选择使用哪个版本。

例如,您可以有一个纹理“引擎”类来表示游戏中的纹理。如果您支持 OS X 和 Windows,则可能有一个“Texture.h”,其中包含“Windows/Texture.h”或“OSX/Texture.h”,具体取决于您正在编译的平台。两个 header 都将定义一个具有相同接口(interface)的 Texture 类(即它们将具有相同的公共(public)函数和相同的参数),但它们的实现将是特定于平台的。

澄清一下,游戏应该告诉应用程序初始化渲染器;游戏逻辑和实现细节之间应该有严格的界限。渲染器是一个实现细节,而不是游戏逻辑的一部分。游戏类应该对系统一无所知,只对游戏世界一无所知。

关于c++ - 在独立于平台的设计中传递特定于平台的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2133103/

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