Windows 2d遊戲開發
下面的程式碼是GDI遊戲開發的核心框架,我也是按書上碼下來,記錄下來作為參考
//--------------------------程式說明-----------------------------
//程式名稱:GDIdemo
//描述:GDI繪圖模版
//---------------------------------------------------------------
//------------------------標頭檔案部分------------------------------
#include<Windows.h>
//可以在此區域繼續新增標頭檔案
//--------------------------------------------------------------------
//------------------------巨集定義-------------------------------------
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_TITLE L"GDI程式框架"
//-------------------------------------------------------------------
//----------------------全域性變數宣告部分-----------------------------
HDC g_hdc = NULL;//全域性裝置環境控制程式碼
//----------------全域性函式宣告部分---------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);//視窗過程函式
BOOL Game_Init(HWND hwnd);//在此函式進行資源初始化
VOID Game_Paint(HWND hwnd);//在此函式進行繪圖程式碼的書寫
BOOL Game_CleanUp(HWND hwnd);//在此函式進行資源的清理
//--------------------WinMain---------------------------------------
//Windows應用程式的入口函式
//---------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//[1]視窗建立四部曲之一:開始設計一個完整的視窗類
WNDCLASSEX wc = {};//用WNDCLASSEX定義了一個視窗類
wc.cbSize = sizeof(WNDCLASSEX);//設定結構體的位元組數大小
wc.style = CS_HREDRAW | CS_VREDRAW;//設定視窗的樣式
wc.lpfnWndProc = WndProc;//設定指向視窗過程的指標
wc.cbClsExtra = 0;//視窗類的附加記憶體
wc.cbWndExtra = 0;//視窗的附加記憶體
wc.hInstance = hInstance;//制定包含視窗過程的程式的例項控制程式碼
wc.hIcon = (HICON)::LoadImage(NULL, L"", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);//本地載入自定義圖示“”
wc.hCursor = LoadCursor(NULL, IDC_ARROW);//指定視窗類的游標控制程式碼
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//指定一個灰色畫刷控制程式碼
wc.lpszClassName = L"WINDOW";//用一個空終止的字串,指定視窗類的名字
wc.lpszMenuName = NULL;//用一個空終止的字串,指定選單資源的名字
//[2]視窗的建立四部曲之二:註冊視窗類
if (!RegisterClassEx(&wc))//設計完視窗,需要對視窗類進行註冊,這樣才能建立該型別的視窗
return -1;
//[3]視窗建立四部曲之三:正式建立視窗
HWND hwnd = CreateWindow(L"WINDOW", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
//視窗建立四部曲之四:視窗的移動,顯示與更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true);//調整視窗顯示時的位置位於(250,80)處
ShowWindow(hwnd, nShowCmd);//呼叫showwindow來顯示視窗
UpdateWindow(hwnd);//隊視窗進行更新
//遊戲資源的初始化,若初始化失敗彈出一個訊息框並返回FALSE
if (!Game_Init(hwnd))
{
MessageBox(hwnd, L"初始化資源失敗", L"訊息視窗", 0);//使用MESSASGEBOX建立一個訊息視窗
return FALSE;
}
//【5】訊息迴圈
MSG msg = { 0 };//定義並初始化msg
while (msg.message != WM_QUIT)//使用while迴圈,如果訊息不是wm-quit訊息,就繼續迴圈
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))//檢視應用程式訊息佇列,有訊息時就將佇列中的訊息派發出去
{
TranslateMessage(&msg);//將虛擬訊息轉換為字元訊息
DispatchMessage(&msg);//分發一個訊息給視窗程式
}
}
//[6]視窗類的登出
UnregisterClass(L"WINDOW", wc.hInstance);//程式準備結束登出視窗類
return 0;
}
//-----------------------------WinProc函式-----------------------------------------
//對視窗訊息進行處理
//---------------------------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT paintStruct;//定義一個paintstruct來記錄繪製資訊
switch (message)//switch程式開始
{
case WM_PAINT://若是客戶區重繪訊息
g_hdc = BeginPaint(hwnd, &paintStruct);//指定視窗進行繪圖工作的準備,並將和繪圖有關的資訊填充到painstruct結構體中去
Game_Paint(hwnd);
EndPaint(hwnd,&paintStruct);//指定視窗的繪畫過程結束
ValidateRect(hwnd, NULL);//更新客戶區的顯示
break;
case WM_KEYDOWN://鍵盤按下訊息
if (wParam==VK_ESCAPE)//如果按下esc
DestroyWindow(hwnd);//銷燬視窗併傳送wm-destroy訊息
break;
case WM_DESTROY://若是視窗銷燬資訊
Game_CleanUp(hwnd);
PostQuitMessage(0);//向系統表明有個執行緒有終止請求。用來響應WM_DESTROY訊息
break;//跳出該switch語句
default://若上述case條件都不符合,則執行default語句
return DefWindowProc(hwnd, message, wParam, lParam);//呼叫預設的視窗過程
}
return 0;//正常退出
}
//-------------------------【Game_Init】
BOOL Game_Init(HWND hwnd)
{
g_hdc = GetDC(hwnd);
Game_Paint(hwnd);
ReleaseDC(hwnd, g_hdc);
return TRUE;
}
//-------------------------【Game_Paint】
VOID Game_Paint(HWND hwnd)
{
}
//-----------------------------[Game_CleanUp]
BOOL Game_CleanUp(HWND hwnd)
{
return TRUE;
}
相關文章
- Unity3D 2D實戰遊戲開發Unity3D遊戲開發
- Unity 4.x 2D遊戲開發基礎教程Unity遊戲開發
- Unity 2D遊戲開發快速入門第1章建立一個簡單的2D遊戲Unity遊戲開發
- Unity 2D遊戲開發快速入門(內部資料)Unity遊戲開發
- 遊戲開發學堂:2D模式下的alpha混合(轉)遊戲開發模式
- Unity 4.x 2D遊戲開發基礎教程 大學霸Unity遊戲開發
- 《Unity 2D與3D手機遊戲開發實戰》簡介Unity3D遊戲開發
- Unity和Cocos2D在2D遊戲開發上的對比Unity遊戲開發
- 【使用Unity開發Windows Phone上的2D遊戲】(2)初識工具UnityWindows遊戲
- Quartz 2Dquartz
- 遊戲開發者:8.8%的開發者為Windows Phone開發遊戲遊戲開發Windows開發遊戲
- 遊戲開發新手入門之Windows程式設計(轉)遊戲開發Windows程式設計
- 【UNITY3D 遊戲開發之四】有關實現2D幀序列幀播放相關—Animating TiledtextureUnity3D遊戲開發
- A implementaion for 2D blue noiseAI
- WPF 2D 碰撞檢測
- Unity 2D遊戲製作Unity遊戲
- Windows11 3D Emoj 變2D ? 微軟回應:使用了錯誤的圖片Windows3D微軟
- UNITY3D 2D物流流體外掛下載|Liquid Physics 2DUnity3DUI
- CSS3 2D轉換CSSS3
- Leetcode Search a 2D MatrixLeetCode
- [Unity][Camera][2D][優化]2D攝像機可視範圍外不播放動畫Unity優化動畫
- CSS transform 2D變換詳解CSSORM
- LeetCode-Flatten 2D VectorLeetCode
- 2D圓形隨機分佈隨機
- Leetcode-Search a 2D MatrixLeetCode
- Search a 2D Matrix leetcode javaLeetCodeJava
- 2D遊戲如何提升遊戲體驗? 2D關卡設計的六大正規化遊戲
- NGUI建立Camera引數為Simple 2D的UI UI物件的結構UI Root(2D)NGUI物件
- 遊戲開發入門(一)遊戲開發概述遊戲開發
- 遊戲開發遊戲開發
- 遊戲開發者:過半移動遊戲開發者使用Unity引擎遊戲開發Unity
- Toon Boom Harmony 21,2D動畫製作OOM動畫
- LeetCode-Search a 2D Matrix IILeetCode
- lintcode Range Sum Query 2D - Immutable
- LeetCode 240 Search a 2D Matrix IILeetCode
- Webgl的2D開發方案(一)spritebatcherWebBAT
- LintCode-Search 2D Matrix II
- Robocup 模擬2D平臺平臺