#pragma once #include "EngineFrame/Scene/Scene.h" #include "EngineFrame/Render/RenderManager.h" #include "Tool/RefPtr.h" #include #include #include #include #include #include // some switch buttons #define JOY_A 0 #define JOY_B 1 #define JOY_X 2 #define JOY_Y 3 #define JOY_PLUS 10 #define JOY_MINUS 11 #define JOY_LEFT 12 #define JOY_UP 13 #define JOY_RIGHT 14 #define JOY_DOWN 15 class Debug_Actor; class Game { #ifndef __SWITCH__ typedef Uint32 u32; #endif public: // 删除拷贝构造和赋值运算符,确保无法复制 Game(const Game &) = delete; Game &operator=(const Game &) = delete; // 移动构造和赋值也删除,避免意外转移 Game(Game &&) = delete; Game &operator=(Game &&) = delete; // 全局访问点 static Game &GetInstance() { static Game instance; // 局部静态变量,保证只初始化一次 return instance; } void Init(std::function CallBack); void Run(); void HandleEvents(SDL_Event *e); void Update(float deltaTime); void Render(); void Clear(); // 切换场景 void ChangeScene(RefPtr scene); // 设定UI层场景对象 void ChangeUIScene(RefPtr scene); RenderManager* GetRenderer(); // 每秒帧率 u32 m_fps; // 每帧绘制调用次数 u32 m_RenderCount = 0; private: // 构造函数和析构函数设为私有,防止外部创建和销毁 Game(); ~Game(); // 游戏是否运行 bool m_isRunning = true; // 窗口 SDL_Window *m_window; // 渲染器 RenderManager* m_renderer; // 游戏层场景 RefPtr m_scene; // UI层场景 RefPtr m_uiScene; // 帧数 #ifdef __SWITCH__ float m_Settingfps = 60.0; #else float m_Settingfps = 144.0; #endif // 单帧时间 float m_frameTime = 0.f; // 每秒内的帧数计数器 u32 m_frameCounter; // 上一次输出帧率的时间 u32 m_lastFpsPrintTime; // 帧间隔 float m_deltaTime = 0.f; public: // 屏幕宽高 int Screen_W = 1280; int Screen_H = 720; };