#include "..\ebase.h" #include "..\emanagers.h" // 控制游戏终止 static bool s_bEndGame = false; // 控制游戏暂停 static bool s_bPaused = false; // 是否进行过初始化 static bool s_bInitialized = false; // AppName static e2d::EString s_sAppName; bool e2d::EGame::init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID, LPCTSTR sAppname) { if (s_bInitialized) { WARN_IF(true, "The game has been initialized!"); return false; } do { // 初始化 COM 组件 CoInitializeEx(NULL, COINIT_MULTITHREADED); // 创建设备无关资源 if (!ERenderer::__createDeviceIndependentResources()) { WARN_IF(true, "ERenderer::__createDeviceIndependentResources Failed!"); break; } // 初始化窗口 if (!EWindow::__init(sTitle, nWidth, nHeight, pIconID)) { WARN_IF(true, "EWindow::__init Failed!"); break; } // 创建设备相关资源 if (!ERenderer::__createDeviceResources()) { WARN_IF(true, "ERenderer::__createDeviceResources Failed!"); break; } // 初始化 DirectInput if (!EInput::__init()) { WARN_IF(true, "EInput::__init Failed!"); break; } // 初始化播放器 if (!EMusicManager::__init()) { WARN_IF(true, "EMusicManager::__init Failed!"); break; } // 重设 Client 大小 EWindow::setSize(nWidth, nHeight); // 设置 AppName s_sAppName = (sAppname != nullptr) ? sAppname : EWindow::getTitle(); // 标志初始化成功 s_bInitialized = true; } while (0); return s_bInitialized; } int e2d::EGame::run() { if (!s_bInitialized) { ASSERT(false, "You must initialize EGame first!"); return -1; } // 初始化场景管理器 ESceneManager::__init(); // 显示窗口 ::ShowWindow(EWindow::getHWnd(), SW_SHOWNORMAL); // 刷新窗口内容 ::UpdateWindow(EWindow::getHWnd()); // 处理窗口消息 EWindow::__poll(); // 初始化计时 ETime::__init(); while (!s_bEndGame) { // 处理窗口消息 EWindow::__poll(); // 刷新时间 ETime::__updateNow(); // 判断是否达到了刷新状态 if (ETime::__isReady()) { while (ETime::__isReady()) { EInput::__updateDeviceState(); // 获取用户输入 ESceneManager::__update(); // 更新场景内容 ETime::__updateLast(); // 刷新时间信息 } if (!s_bPaused) { ETimerManager::__update(); // 定时器管理器执行程序 EActionManager::__update(); // 动作管理器执行程序 } ERenderer::__render(); // 渲染游戏画面 } else { EObjectManager::__flush(); // 刷新内存池 ETime::__sleep(); // 挂起线程 } } return 0; } void e2d::EGame::pause() { s_bPaused = true; } void e2d::EGame::resume() { if (isPaused()) { s_bPaused = false; // 刷新当前时间 ETime::__updateLast(); // 重置动画和定时器 EActionManager::__resetAllActions(); ETimerManager::__resetAllTimers(); } } bool e2d::EGame::isPaused() { return s_bPaused; } void e2d::EGame::quit() { s_bEndGame = true; // 这个变量将控制游戏是否结束 } void e2d::EGame::uninit() { // 删除所有场景 ESceneManager::__uninit(); // 关闭输入 EInput::__uninit(); // 关闭播放器 EMusicManager::__uninit(); // 恢复计时操作 ETime::__uninit(); // 清空图片缓存 EImage::clearCache(); // 刷新内存池 EObjectManager::__flush(); // 删除渲染相关资源 ERenderer::__discardResources(); // 销毁窗口 EWindow::__uninit(); CoUninitialize(); s_bInitialized = false; } e2d::EString e2d::EGame::getAppName() { return s_sAppName; }