新增获取游戏时长函数,以及窗口在激活、非激活、关闭时的执行函数
This commit is contained in:
		
							parent
							
								
									2422ec258b
								
							
						
					
					
						commit
						0689e1b0e9
					
				|  | @ -16,6 +16,8 @@ using namespace std::chrono; | |||
| e2d::EApp * s_pInstance = nullptr; | ||||
| // 场景栈
 | ||||
| std::stack<e2d::EScene*> s_SceneStack; | ||||
| // 游戏开始时间
 | ||||
| static steady_clock::time_point s_tStart; | ||||
| 
 | ||||
| e2d::EApp::EApp() | ||||
| 	: m_bRunning(false) | ||||
|  | @ -195,6 +197,8 @@ void e2d::EApp::run() | |||
| 	UpdateWindow(GetHWnd()); | ||||
| 	// 运行游戏
 | ||||
| 	m_bRunning = true; | ||||
| 	// 记录开始时间
 | ||||
| 	s_tStart = steady_clock::now(); | ||||
| 
 | ||||
| 	MSG msg; | ||||
| 
 | ||||
|  | @ -222,7 +226,15 @@ void e2d::EApp::setFPS(UINT32 fps) | |||
| 	nAnimationInterval = 1000 / fps; | ||||
| } | ||||
| 
 | ||||
| bool e2d::EApp::onExit() | ||||
| void e2d::EApp::onActivate() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void e2d::EApp::onInactive() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| bool e2d::EApp::onCloseWindow() | ||||
| { | ||||
| 	return true; | ||||
| } | ||||
|  | @ -241,6 +253,8 @@ void e2d::EApp::_mainLoop() | |||
| 	nInterval = GetInterval(tLast); | ||||
| 	// 判断间隔时间是否足够
 | ||||
| 	if (nInterval >= nAnimationInterval) | ||||
| 	{ | ||||
| 		if (!m_bPaused) | ||||
| 		{ | ||||
| 			// 记录当前时间
 | ||||
| 			tLast = GetNow(); | ||||
|  | @ -253,6 +267,7 @@ void e2d::EApp::_mainLoop() | |||
| 				this->quit(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		// 计算挂起时长
 | ||||
|  | @ -436,7 +451,12 @@ HWND e2d::EApp::getHWnd() | |||
| 	return GetHWnd(); | ||||
| } | ||||
| 
 | ||||
| void e2d::EApp::closeWindow() | ||||
| LONGLONG e2d::EApp::getTotalDurationFromStart() | ||||
| { | ||||
| 	return GetInterval(s_tStart); | ||||
| } | ||||
| 
 | ||||
| void e2d::EApp::hideWindow() | ||||
| { | ||||
| 	ShowWindow(GetHWnd(), SW_HIDE); | ||||
| } | ||||
|  | @ -460,11 +480,6 @@ void e2d::EApp::free() | |||
| 	} | ||||
| 	// 删除图片缓存
 | ||||
| 	ESprite::clearCache(); | ||||
| 	// 删除所有定时器、监听器和动画
 | ||||
| 	ETimerManager::clearAllTimers(); | ||||
| 	EMsgManager::clearAllKeyboardListeners(); | ||||
| 	EMsgManager::clearAllMouseListeners(); | ||||
| 	//ActionManager::clearAllActions();
 | ||||
| 	// 删除所有对象
 | ||||
| 	EObjectManager::clearAllObjects(); | ||||
| } | ||||
|  | @ -481,7 +496,7 @@ void e2d::EApp::end() | |||
| 
 | ||||
| void e2d::EApp::_enterNextScene() | ||||
| { | ||||
| 	// 执行当前场景的 onExit 函数
 | ||||
| 	// 执行当前场景的 onCloseWindow 函数
 | ||||
| 	if (m_pCurrentScene) | ||||
| 	{ | ||||
| 		m_pCurrentScene->onExit(); | ||||
|  | @ -650,10 +665,31 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam | |||
| 			wasHandled = true; | ||||
| 			break; | ||||
| 
 | ||||
| 			// 窗口激活消息
 | ||||
| 			case WM_ACTIVATE: | ||||
| 			{ | ||||
| 				if (LOWORD(wParam) == WA_INACTIVE) | ||||
| 				{ | ||||
| 					pEApp->getCurrentScene()->onInactive(); | ||||
| 					pEApp->onInactive(); | ||||
| 					pEApp->m_bPaused = true; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					pEApp->onActivate(); | ||||
| 					pEApp->getCurrentScene()->onActivate(); | ||||
| 					pEApp->m_bPaused = false; | ||||
| 				} | ||||
| 			} | ||||
| 			result = 1; | ||||
| 			wasHandled = true; | ||||
| 			break; | ||||
| 
 | ||||
| 			// 窗口关闭消息
 | ||||
| 			case WM_CLOSE: | ||||
| 			{ | ||||
| 				if (pEApp->onExit()) | ||||
| 				if (pEApp->getCurrentScene()->onCloseWindow() &&  | ||||
| 					pEApp->onCloseWindow()) | ||||
| 				{ | ||||
| 					DestroyWindow(hWnd); | ||||
| 				} | ||||
|  |  | |||
|  | @ -26,6 +26,19 @@ void e2d::EScene::onExit() | |||
| { | ||||
| } | ||||
| 
 | ||||
| void e2d::EScene::onActivate() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void e2d::EScene::onInactive() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| bool e2d::EScene::onCloseWindow() | ||||
| { | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| void e2d::EScene::_onRender() | ||||
| { | ||||
| 	m_Root->_callOn(); | ||||
|  |  | |||
|  | @ -208,6 +208,7 @@ | |||
|     <ClCompile Include="Node\ENode.cpp" /> | ||||
|     <ClCompile Include="Node\ERectangle.cpp" /> | ||||
|     <ClCompile Include="Node\ESprite.cpp" /> | ||||
|     <ClCompile Include="Node\EText.cpp" /> | ||||
|     <ClCompile Include="Tool\EObjectManager.cpp" /> | ||||
|     <ClCompile Include="Tool\ETimerManager.cpp" /> | ||||
|     <ClCompile Include="Win\winbase.cpp" /> | ||||
|  |  | |||
|  | @ -78,6 +78,9 @@ | |||
|     <ClCompile Include="Msg\Listener\EKeyboardPressListener.cpp"> | ||||
|       <Filter>Msg\Listener</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="Node\EText.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="Win\winbase.h"> | ||||
|  |  | |||
|  | @ -0,0 +1 @@ | |||
| #include "..\enodes.h" | ||||
|  | @ -46,8 +46,14 @@ public: | |||
| 		UINT32 fps | ||||
| 	); | ||||
| 
 | ||||
| 	// 退出程序时的执行程序
 | ||||
| 	virtual bool onExit(); | ||||
| 	// 重写这个函数,它将在窗口激活时执行
 | ||||
| 	virtual void onActivate(); | ||||
| 
 | ||||
| 	// 重写这个函数,它将在窗口非激活时执行
 | ||||
| 	virtual void onInactive(); | ||||
| 
 | ||||
| 	// 重写这个函数,它将在关闭窗口时执行
 | ||||
| 	virtual bool onCloseWindow(); | ||||
| 
 | ||||
| 	// 释放所有内存资源
 | ||||
| 	void free(); | ||||
|  | @ -95,6 +101,12 @@ public: | |||
| 	// 获取当前场景
 | ||||
| 	static EScene * getCurrentScene(); | ||||
| 
 | ||||
| 	// 获取窗口句柄
 | ||||
| 	static HWND getHWnd(); | ||||
| 
 | ||||
| 	// 获取从游戏开始到当前经过的毫秒数
 | ||||
| 	static LONGLONG getTotalDurationFromStart(); | ||||
| 
 | ||||
| 	// 获取 AppName
 | ||||
| 	static EString getAppName(); | ||||
| 
 | ||||
|  | @ -113,11 +125,8 @@ public: | |||
| 		bool value | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取窗口句柄
 | ||||
| 	static HWND getHWnd(); | ||||
| 
 | ||||
| 	// 隐藏窗口
 | ||||
| 	static void closeWindow(); | ||||
| 	static void hideWindow(); | ||||
| 
 | ||||
| 	// 显示窗口
 | ||||
| 	static void showWindow(); | ||||
|  | @ -166,6 +175,7 @@ protected: | |||
| 
 | ||||
| protected: | ||||
| 	bool	m_bRunning; | ||||
| 	bool	m_bPaused; | ||||
| 	EString	m_sTitle; | ||||
| 	EString	m_sAppName; | ||||
| 	EColor	m_ClearColor; | ||||
|  | @ -191,6 +201,15 @@ public: | |||
| 	// 重写这个函数,它将在离开这个场景时自动执行
 | ||||
| 	virtual void onExit(); | ||||
| 
 | ||||
| 	// 重写这个函数,它将在窗口激活时执行
 | ||||
| 	virtual void onActivate(); | ||||
| 
 | ||||
| 	// 重写这个函数,它将在窗口非激活时执行
 | ||||
| 	virtual void onInactive(); | ||||
| 
 | ||||
| 	// 重写这个函数,它将在关闭窗口时执行
 | ||||
| 	virtual bool onCloseWindow(); | ||||
| 
 | ||||
| 	// 添加子节点到场景
 | ||||
| 	void add( | ||||
| 		ENode * child,  | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue