⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameframedlg.cpp

📁 游戏框架
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//缓冲区为空退出
	if(nSize==0) return;
	//返回缓冲区失败退出
	if(!m_pKeyBoardBuffer.GetBuffer(m_mKeyProcBuffers)) return;

	//循环所有消息
	for(int i=0;i<nSize;i++){
		switch(m_mKeyProcBuffers[i].nMessage){
			case WM_CHAR:
				{
					m_FMHandles.pGameBody->OnKeyPass((TCHAR)m_mKeyProcBuffers[i].nKey, m_mKeyProcBuffers[i].nFlag);
					if(m_pFocusObject){
						m_pFocusObject->OnKeyPass((TCHAR)m_mKeyProcBuffers[i].nKey, m_mKeyProcBuffers[i].nFlag);
					}
				}
				break;
			case WM_KEYDOWN:
				{
					m_FMHandles.pGameBody->OnKeyDown(m_mKeyProcBuffers[i].nKey, m_mKeyProcBuffers[i].nFlag);
					if(m_pFocusObject){
						m_pFocusObject->OnKeyDown(m_mKeyProcBuffers[i].nKey, m_mKeyProcBuffers[i].nFlag);
					}
				}
				break;
			case WM_KEYUP:
				{
					m_FMHandles.pGameBody->OnKeyUp(m_mKeyProcBuffers[i].nKey, m_mKeyProcBuffers[i].nFlag);
					if(m_pFocusObject){
						m_pFocusObject->OnKeyPass(m_mKeyProcBuffers[i].nKey, m_mKeyProcBuffers[i].nFlag);
					}
				}
				break;
		}
	}
}

//************************************
// <p>Description: 游戏引擎退出</p>
//
// <p>Returns:   void</p>
//************************************
void CGameFrameDlg::GameExitInstanct(){

	try{
		//关闭所有时间器
		m_FMHandles.pTimerEngine->KillAllTimer();
		//关闭调度引擎
		m_FMHandles.pAttemperEngine->StopService();
		//关闭动作引擎
		m_FMHandles.pActionEngine->StopService();
		//关闭时间引擎
		m_FMHandles.pTimerEngine->StopService();
		if(m_GameFrameSetting.bUseSocketEngine)
			m_FMHandles.pClientSocket->CloseSocket(false);

		SafeDelete(m_FMHandles.pAttemperEngine);
		SafeDelete(m_FMHandles.pActionEngine);
		SafeDelete(m_FMHandles.pTimerEngine);
		//Edit by Randy at 2007.9.5
		//修复结束后的异常.	由于pClinetSocket为接口,为以在释放时直接释放pClientSocket会导致无法正常析构
		//造成内存泄露。改为调用其 Release() 后。测试无泄露.
		//SafeDelete(m_FMHandles.pClientSocket);
		if(m_FMHandles.pClientSocket)
			m_FMHandles.pClientSocket->Release();

		if(m_FMHandles.pGameBody)
			m_FMHandles.pGameBody->OnUnInitialize();

		//注销鼠标指针
		SafeDelete(m_pMouseIcon);

#if defined _DEBUG_HOSE
		FreeConsole();
#endif
		// 注销父窗口网络消息的回调处理
		//UnhookWindowsHookEx(hHook);
		//关闭声音库
		SafeDelete(m_FMHandles.pSoundHelper);
		//删除资源
		SafeDelete(m_FMHandles.pResourceLib);

		// Restore video mode and free
		// all allocated resources
		m_FMHandles.lpGDI->System_Shutdown();

		// Release the HGE interface.
		// If there are no more references,
		// the HGE object will be deleted.
		m_FMHandles.lpGDI->Release();
		// 注销消息处理函数
		UnhookWindowsHookEx(g_hHook);
	}
	catch(...){
	}
}

//************************************
// <p>Description: 消息处理函数</p>
//
// <p>Returns:   void</p>
//************************************
void CGameFrameDlg::WindowMsgProce(UINT Msg,WPARAM wParam,LPARAM lParam){

	switch(Msg){
		case WM_KEYDOWN:
		case WM_CHAR:
		case WM_KEYUP:
			{
				tagKeyBoardBuffer KeyBoardBuffer;
				ZeroMemory(&KeyBoardBuffer,sizeof(tagKeyBoardBuffer));
				KeyBoardBuffer.nMessage = Msg;
				KeyBoardBuffer.nKey  =(int)wParam;
				KeyBoardBuffer.nFlag  = (int)lParam;
				m_pKeyBoardBuffer.Push(KeyBoardBuffer);
				break;
			}
		case WM_MOUSEMOVE:
		case WM_LBUTTONDOWN:
		case WM_LBUTTONDBLCLK:
		case WM_RBUTTONDOWN:
		case WM_RBUTTONDBLCLK:
		case WM_MBUTTONDOWN:
		case WM_MBUTTONDBLCLK:
		case WM_LBUTTONUP:
		case WM_RBUTTONUP:
		case WM_MBUTTONUP:
			{
				tagMouseBuffer MouseBuffer;
				ZeroMemory(&MouseBuffer,sizeof(tagMouseBuffer));
				switch(Msg){
					case WM_MOUSEMOVE:
						MouseBuffer.nType= INPUT_MOUSE_MOVE;
						break;
					case WM_LBUTTONDOWN:
					case WM_RBUTTONDOWN:
					case WM_MBUTTONDOWN:
						MouseBuffer.nType = INPUT_MOUSE_DOWN;
						break;
					case WM_LBUTTONDBLCLK:
					case WM_RBUTTONDBLCLK:
					case WM_MBUTTONDBLCLK:
						MouseBuffer.nType = INPUT_MOUSE_DBCLICK;
						break;
					case WM_LBUTTONUP:
					case WM_RBUTTONUP:
					case WM_MBUTTONUP:
						MouseBuffer.nType= INPUT_MOUSE_UP;
						break;
				}
				MouseBuffer.nMessage = Msg;
				MouseBuffer.nComboKey = (UINT)(wParam);
				MouseBuffer.x  = (float)(short)LOWORD(lParam);
				MouseBuffer.y  = (float)(short)HIWORD(lParam);
				m_pMouseBuffer.Push(MouseBuffer);
				break;
			}				
		case CN_CONTROL_MESSAGE:
			{
				CONTROLMESSAGE*	tagControlMsg = (CONTROLMESSAGE*)wParam;
				m_FMHandles.pGameBody->OnControlMessage((IGameObject*)tagControlMsg->lpVoid, tagControlMsg->wParam, tagControlMsg->lParam);
				SafeDelete(tagControlMsg);
			}
			break;
		case CN_USER_DEFINE_MESSAGE:
			m_FMHandles.pGameBody->OnUserMessage(wParam, lParam);
			break;
	}

	m_FMHandles.pGameBody->OnWindowMsgProce(Msg, wParam, lParam);
	return;
}

//************************************
// <p>Description: 返回绘图内核</p>
//
// <p>Returns:   LPGDI</p>
//************************************
LPGDI CGameFrameDlg::GetGDI(){
	return m_FMHandles.lpGDI;
}

//************************************
// <p>Description: 返回时间引擎</p>
//
// <p>Returns:   CTimerEngine*</p>
//************************************
CTimerEngine* CGameFrameDlg::GetTimerEngine(){
	return m_FMHandles.pTimerEngine;
}

//************************************
// <p>Description: 返回动作引擎</p>
//
// <p>Returns:   CActionEngine*</p>
//************************************
CActionEngine* CGameFrameDlg::GetActionEngine(){
	return m_FMHandles.pActionEngine;
}

//************************************
// <p>Description: 返回纹理库</p>
//
// <p>Returns:   CHtextureLib*</p>
//************************************
CResourceLib* CGameFrameDlg::GetResourceLib(){
	return m_FMHandles.pResourceLib;
}

//返回音乐库附助
CSoundHelper* CGameFrameDlg::GetSoundHelper(){
	return m_FMHandles.pSoundHelper;
}

//返回道具管理器
IGamePropertiesManager* CGameFrameDlg::GetPropertiesManager(){
	return m_FMHandles.pIPropertiesManager;
}

//************************************
// <p>Description: 返回框架设定</p>
//
// <p>Returns:   GAMEFRAMESETTING*</p>
//************************************
GAMEFRAMESETTING* CGameFrameDlg::GetGameFrameSetting(){
	return &m_GameFrameSetting;
}

//************************************
// <p>Description: 失去焦点回调函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//	Randy 8-27
// <p>Returns:   void</p>
//************************************
bool CGameFrameDlg::FocusLostFunc(void){
	if(!m_FMHandles.pGameBody) return false;
	m_FMHandles.pGameBody->OnFocusLostFunc();
	return false;
}

//************************************
// <p>Description: 重获焦点回调函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//	Randy 8-27
// <p>Returns:   void</p>
//************************************
bool CGameFrameDlg::FocusGainFunc(void){
	if(!m_FMHandles.pGameBody) return false;
	m_FMHandles.pGameBody->OnFocusGainFunc();
	return false;
}

//************************************
// <p>Description: 每帧的回调函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//
// <p>Returns:   bool</p>
//************************************
bool CGameFrameDlg::FrameFunc(void){

	//判断游戏主体是否已初始化
	if(!m_FMHandles.pGameBody) return false;

	m_bHasInputEvent = m_FMHandles.lpGDI->Input_GetEvent(&m_hgeInputEvent);

	//if(m_bHasInputEvent){
	//	// 键盘事件处理
	//	OnKeyPassEvent();
	//	// 鼠标事件处理
	//	OnMouseEvent();
	//}
	m_bHasInputEvent = m_pKeyBoardBuffer.IsEnmity();
	if(!m_bHasInputEvent){
		// 键盘事件处理
		OnKeyPassEvent();
	}
	m_bHasInputEvent = m_pMouseBuffer.IsEnmity();
	if(!m_bHasInputEvent){
		// 鼠标处理
		OnMouseEvent();
	}

	// 游戏主体逻辑处理
	m_FMHandles.pGameBody->OnFrame();

	// 帧计数器(内部计数)
	FrameCount();

	return false;
}

//************************************
// <p>Description: 帧计数器</p>
//
// <p>Returns:   void</p>
//************************************
void CGameFrameDlg::FrameCount(){
	//m_FrameCount.ElapseFrames++;
	//if(++m_FrameCount.PreNetworkPacketElapseFrames>PRENETWORKPACKETELAPSEFRAMES) m_FrameCount.PreNetworkPacketElapseFrames = 0;
	//if(++m_FrameCount.PreStatusElapseFrames>PRESTATUSELAPSEFRAMES) m_FrameCount.PreStatusElapseFrames = 0;
	//if(++m_FrameCount.PreSecondElapseFrames>PRESECONDELAPSEFRAMES) m_FrameCount.PreSecondElapseFrames = 0;
}

//************************************
// <p>Description: 渲染的回调函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//
// <p>Returns:   bool</p>
//************************************
bool CGameFrameDlg::RenderFunc(void){

	//判断游戏主体是否已初始化
	if(!m_FMHandles.pGameBody) return false;

	float	fDelta = m_FMHandles.lpGDI->Timer_GetDelta();
	//prerender
	m_FMHandles.pGameBody->OnPreRender((WPARAM)(&fDelta));

	//render
	m_FMHandles.lpGDI->Gfx_BeginScene(); 
	m_FMHandles.lpGDI->Gfx_Clear(0);

	m_FMHandles.pGameBody->OnRender((WPARAM)(&fDelta));

	//鼠标图标渲染
	if(m_pMouseIcon && m_pMouseIcon->IsShowMouse())
		m_pMouseIcon->Render((WPARAM)(&fDelta));

	m_FMHandles.lpGDI->Gfx_EndScene();
	return false;
}

//************************************
// <p>Description: 设置游戏主体回调钩子</p>
// <p>Parameters:  </p>
// <p>    IGameBody * pGameBody</p>
//
// <p>Returns:   bool</p>
//************************************
bool CGameFrameDlg::SetGameBodySink(IGameBody* pGameBody){
	m_FMHandles.pGameBody = pGameBody;
	m_FMHandles.pGameBody->SetFrameManagerHandles(&m_FMHandles);
	return true;
}

//************************************
// <p>Description: 帧处理的钩子函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//
// <p>Returns:   bool</p>
//************************************
bool CGameFrameDlg::g_FrameFunc(void){
	theGame->FrameFunc();
	return false;
}

//************************************
// <p>Description: 渲染处理的钩子函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//
// <p>Returns:   bool</p>
//************************************
bool CGameFrameDlg::g_RenderFunc(void){
	theGame->RenderFunc();
	return false;
}

//************************************
// <p>Description: 失去焦点回调函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//	Randy 8-27
// <p>Returns:   void</p>
//************************************
bool CGameFrameDlg::g_FocusLostFunc(void){
	theGame->FocusLostFunc();
	return false;
}

//************************************
// <p>Description: 重获焦点回调函数</p>
// <p>Parameters:  </p>
// <p>    void</p>
//	Randy 8-27
// <p>Returns:   void</p>
//************************************
bool CGameFrameDlg::g_FocusGainFunc(void){
	theGame->FocusGainFunc();
	return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -