📄 gameengine.cpp
字号:
#include "GameEngine.h"
//==========================================================================
//静态变量初始化
//==========================================================================
GameEngine *GameEngine::m_pGameEngine = NULL;
//==========================================================================
//window 函数
//==========================================================================
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdLine,int iCmdShow)
{
MSG msg;
if(GameInitialize(hInstance))
{
//初始化游戏引擎
if(!GameEngine::GetEngine()->Initialize(iCmdShow))
{
return false;
}
while(true)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
//处理消息
if(msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//确保游戏没有休眠
if(!GameEngine::GetEngine()->GetSleep())
{
//查看是否过了一个游戏周期
Sleep(GameEngine::GetEngine()->GetFrameDelay());
HandleKeys();
GameCycle();
}
}
}
return (int) msg.wParam;
}
GameEnd();
return true;
}
LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
//将所有windows 消息传递给游戏引擎
return GameEngine::GetEngine()->HandleEvent(hWindow,msg,wParam,lParam);
}
//============================================================================
//construction and distruction
//============================================================================
GameEngine:: GameEngine(HINSTANCE hInstance ,LPTSTR szWindowClass,LPTSTR szTitle,
WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight)
{
m_pGameEngine = this;
m_hInstance = hInstance;
m_hWindow = NULL;
if(lstrlen(szWindowClass)>0)
{
lstrcpy(m_szWindowClass,szWindowClass);
}
if(lstrlen(szTitle)>0)
{
lstrcpy(m_szTitle,szTitle);
}
m_wIcon = wIcon;
m_wSmallIcon = wSmallIcon;
m_iWidth = iWidth;
m_iHeight = iHeight;
m_iFrameDelay = 50;
m_bSleep = true;
}
GameEngine::~GameEngine()
{
}
//============================================================================================
//游戏引擎常规方法
//============================================================================================
bool GameEngine::Initialize(int iCmdShow)
{
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = m_hInstance;
wndclass.hIcon = LoadIcon(m_hInstance,MAKEINTRESOURCE(GetIcon()));
wndclass.hIconSm = LoadIcon(m_hInstance,MAKEINTRESOURCE(GetSmallIcon()));
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW +1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = m_szWindowClass;
//注册窗口类
if(!RegisterClassEx(&wndclass))
{
return false;
}
//根据游戏大小计算窗口大小和位置
int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2;
int iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2
+GetSystemMetrics(SM_CYCAPTION);
if(wndclass.lpszMenuName != NULL)
{
iWindowHeight += GetSystemMetrics(SM_CYMENU);
}
int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN) - iWindowWidth) / 2;
int iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight) /2;
//创建窗口
m_hWindow = CreateWindow(m_szWindowClass, m_szTitle,WS_POPUPWINDOW |
WS_CAPTION | WS_MINIMIZEBOX, iXWindowPos, iYWindowPos,
iWindowWidth,iWindowHeight,NULL,NULL,m_hInstance,NULL);
if(!m_hWindow)
{
return false;
}
//显示和更新窗口
ShowWindow(m_hWindow,iCmdShow);
UpdateWindow(m_hWindow);
return true;
}
LRESULT GameEngine::HandleEvent(HWND hWindow,UINT msg,WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_CREATE: //创建Windows 游戏开始
SetWindow(hWindow);
GameStart(hWindow);
return 0;
case WM_SETFOCUS:
GameActivate(hWindow);
SetSleep(false);
return 0;
case WM_KILLFOCUS:
GameDeactivate(hWindow);
SetSleep(true);
return 0;
case WM_PAINT: //绘制游戏
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hWindow,&ps);
GamePaint(hDC);
EndPaint(hWindow,&ps);
return 0;
case WM_LBUTTONDOWN: //处理鼠标左键单击
MouseButtonDown(LOWORD(lParam),HIWORD(lParam),MOUSELEFT);
return 0;
case WM_KEYDOWN:
//HandleKeys();
return 0;
case WM_DESTROY:
GameEnd();
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWindow, msg,wParam,lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -