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