子系统的启动和终止

C++的静态初始化次序不可用,因为C++在调用程序进入点(main())之前,全局及静态对象已经被构建,而我们对这些构造函数的调用次序不可预知。

游戏引擎的子系统,常见的设计模式是为每个子系统定义单例类。常用的单例模式的实现方法,难以控制它的析构次序,而且一个获取管理器的实例的方法,可能会有很高的开销。因此,游戏开发中,直接采用简单粗暴的方法。

具体来说,就是将构造和析构函数留空,内部不做任何事情,直接在main函数中按需要的次序调用自定义的启动和终止函数。

class RenderManager{
public:
    RenderManager(){}
    ~RenderManager(){}
    void startUp(){
        //自定义的启动函数
    }
    void shutDown(){
        //自定义的终止函数
    }
};

class PhysicsManager{/*同上面类似*/ };
class AnimationManager{/*同上面类似*/ };
class MemoryManager{/*同上面类似*/ };

RenderManager gRenderManager;
PhysicsManager gPhysicsManager;
AnimationManager gAnimationManager;
MemoryManager gMemoryManager;

int _tmain(int argc, _TCHAR* argv[])
{
    //启动各个子系统
    gMemoryManager.startUp();
    ...
    gRenderManager.startUp();
    gAnimationManager.startUp(); 
    gPhysicsManager.startUp();

    //运行游戏

    //终止各个子系统
    gPhysicsManager.shutDown();
    gAnimationManager.shutDown();
    gRenderManager.shutDown();
    ...
    gMemoryManager.shutDown();
    return 0;
}
View Code

相关文章:

  • 2021-08-10
  • 2021-12-12
  • 2021-12-12
  • 2021-11-29
  • 2021-11-11
  • 2021-11-30
  • 2021-12-02
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-28
  • 2021-09-21
  • 2021-11-23
  • 2021-04-09
相关资源
相似解决方案