管理模块类的最佳选择

我的游戏基础由一系列组成类的模块组成,这些模块在需要时被创建,更新和交互。

一些例子可以是: CWindowManagerCGraphicsManagerCPhysicsManager等等。

我很惭愧地不得不说我目前使用全局指针( extern CWindowManager* g_WindowManager; ),并且我知道这可能是一件坏事。

无论如何,问题是这些模块需要动态创建和删除,并且按照正确的顺序进行。 这也是像CPhysicsManager这样的模块依赖于场景的问题,因此在场景切换并重新创建时会被删除。

现在,我想从使用全局变量来处理游戏中的模块。

我并不害怕重构,但我真的不能想到什么是全局最好的选择。

我曾经想过创建一个CModuleManager类,并将模块的实例存储为成员,然后从一个CModule基类派生出来。 虽然我不能真正想到这将如何详细工作。

这似乎是软件开发中的常见问题,尤其是游戏开发,因此:

- 与简单使用全局指针相比,管理模块的最佳选择是什么?


使用全局数据时需要考虑的一些事项:

  • 多线程。 如果全局数据可以被不同的线程同时访问,则需要小心。
  • 可测试性。 如果您正在编写单元测试,那么全局数据需要在任何代码访问全局数据之前进行初始化。
  • 使用全局数据的替代方法是将每个类/方法所需的对象实例作为参数传递。 这有利于API的所有依赖关系。 这也使得编写单元测试变得更容易。 缺点是,如果你在整个地方传递对象,代码可能会变得混乱。

    你有一个ModuleManager的想法听起来像Service Locator模式 - 我认为这是一个可行的解决方案。 此链接可能有所帮助:http://gameprogrammingpatterns.com/service-locator.html。

    如果您选择继续使用全局指针,那么可以使用智能指针(auto_ptr)在C ++中实现动态删除全局数据。

    链接地址: http://www.djcxy.com/p/30689.html

    上一篇: Best option for managing module classes

    下一篇: Isolate Lua bindings glue code from the rest of my game engine