管理模块类的最佳选择
我的游戏基础由一系列组成类的模块组成,这些模块在需要时被创建,更新和交互。
一些例子可以是: CWindowManager
, CGraphicsManager
, CPhysicsManager
等等。
我很惭愧地不得不说我目前使用全局指针( 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