📄 gameframedlg.cpp
字号:
//缓冲区为空退出
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 + -