麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

GDI---透明動(dòng)畫

2019-11-14 10:20:16
字體:
供稿:網(wǎng)友

goright.bmp:480*108,每個(gè)人物尺寸為80*108 這里寫圖片描述

//-----------------------------------【程序說明】----------------------------------------------// 程序名稱::GDIdemo8// 2013年3月 Create by 淺墨// 描述:游戲動(dòng)畫技巧之透明動(dòng)畫//------------------------------------------------------------------------------------------------//-----------------------------------【頭文件包含部分】---------------------------------------// 描述:包含程序所依賴的頭文件//------------------------------------------------------------------------------------------------#include <windows.h>#include <tchar.h>//使用swPRintf_s函數(shù)所需的頭文件//-----------------------------------【庫文件包含部分】---------------------------------------// 描述:包含程序所依賴的庫文件//------------------------------------------------------------------------------------------------#pragma comment(lib,"winmm.lib") //調(diào)用PlaySound函數(shù)所需庫文件#pragma comment(lib,"Msimg32.lib") //添加使用TransparentBlt函數(shù)所需的庫文件//-----------------------------------【宏定義部分】--------------------------------------------// 描述:定義一些輔助宏//------------------------------------------------------------------------------------------------#define WINDOW_WIDTH 800 //為窗口寬度定義的宏,以方便在此處修改窗口寬度#define WINDOW_HEIGHT 600 //為窗口高度定義的宏,以方便在此處修改窗口高度#define WINDOW_TITLE L"【致我們永不熄滅的游戲開發(fā)夢(mèng)想】游戲動(dòng)畫技巧之 透明動(dòng)畫" //為窗口標(biāo)題定義的宏//-----------------------------------【全局變量聲明部分】-------------------------------------// 描述:全局變量的聲明//------------------------------------------------------------------------------------------------HDC g_hdc=NULL, g_mdc=NULL, g_bufdc=NULL; //全局設(shè)備環(huán)境句柄,兩個(gè)全局內(nèi)存DC句柄HBITMAP g_hSprite=NULL, g_hBackGround=NULL; //定義兩個(gè)位圖句柄,一個(gè)用于存儲(chǔ)人物圖,一個(gè)用于存儲(chǔ)背景圖DWord g_tPre=0,g_tNow=0; //聲明l兩個(gè)函數(shù)來記錄時(shí)間,g_tPre記錄上一次繪圖的時(shí)間,g_tNow記錄此次準(zhǔn)備繪圖的時(shí)間int g_iNum=0,g_iX=0,g_iY=0; //g_iNum用來記錄圖號(hào),g_iX,g_iY分別記錄貼圖的橫縱坐標(biāo)//-----------------------------------【全局函數(shù)聲明部分】-------------------------------------// 描述:全局函數(shù)聲明,防止“未聲明的標(biāo)識(shí)”系列錯(cuò)誤//------------------------------------------------------------------------------------------------LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//窗口過程函數(shù)BOOL Game_Init(HWND hwnd); //在此函數(shù)中進(jìn)行資源的初始化VOID Game_Paint( HWND hwnd); //在此函數(shù)中進(jìn)行繪圖代碼的書寫B(tài)OOL Game_CleanUp(HWND hwnd ); //在此函數(shù)中進(jìn)行資源的清理//-----------------------------------【W(wǎng)inMain( )函數(shù)】--------------------------------------// 描述:Windows應(yīng)用程序的入口函數(shù),我們的程序從這里開始//------------------------------------------------------------------------------------------------int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd){ //【1】窗口創(chuàng)建四步曲之一:開始設(shè)計(jì)一個(gè)完整的窗口類 WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定義了一個(gè)窗口類 wndClass.cbSize = sizeof( WNDCLASSEX ) ; //設(shè)置結(jié)構(gòu)體的字節(jié)數(shù)大小 wndClass.style = CS_HREDRAW | CS_VREDRAW; //設(shè)置窗口的樣式 wndClass.lpfnWndProc = WndProc; //設(shè)置指向窗口過程函數(shù)的指針 wndClass.cbClsExtra = 0; //窗口類的附加內(nèi)存,取0就可以了 wndClass.cbWndExtra = 0; //窗口的附加內(nèi)存,依然取0就行了 wndClass.hInstance = hInstance; //指定包含窗口過程的程序的實(shí)例句柄。 //本地加載自定義ico圖標(biāo),在debug目錄下 //NULL:包含被加載圖像的實(shí)例句柄,若從硬盤或資源文件中加載,為NULL //L"icon.ico":被加載的資源所在的路徑與文件名或資源名稱 //IMAGE_ICON:指定被加載的圖像的類型 //0:圖標(biāo)加載后在內(nèi)存中存儲(chǔ)的寬度,單位為像素,0表示系統(tǒng)預(yù)設(shè) //0:圖標(biāo)加載后在內(nèi)存中存儲(chǔ)的高度,單位為像素,0表示系統(tǒng)預(yù)設(shè) //位圖加載方式,LR_LOADFROMFILE表示從文件中加載 wndClass.hIcon=(HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE); wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); //指定窗口類的光標(biāo)句柄。 wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //為hbrBackground成員指定一個(gè)白色畫刷句柄 wndClass.lpszMenuName = NULL; //用一個(gè)以空終止的字符串,指定菜單資源的名字。 wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一個(gè)以空終止的字符串,指定窗口類的名字。 //【2】窗口創(chuàng)建四步曲之二:注冊(cè)窗口類 if( !RegisterClassEx( &wndClass ) ) //設(shè)計(jì)完窗口后,需要對(duì)窗口類進(jìn)行注冊(cè),這樣才能創(chuàng)建該類型的窗口 return -1; //【3】窗口創(chuàng)建四步曲之三:正式創(chuàng)建窗口 //L"ForTheDreamOfGameDevelop": 指定窗口類的名稱,為設(shè)計(jì)窗口時(shí)的名稱 //WINDOW_TITLE: 顯示在標(biāo)題欄上的窗口的名稱; //WS_OVERLAPPEDWINDOW: 指定窗口的樣式:產(chǎn)生一個(gè)層疊的窗口,具有標(biāo)題欄和邊框 //CW_USEDEFAULT: 窗口水平位置,默認(rèn)為CW_USERDEFAULT //CW_USEDEFAULT: 窗口豎直位置,默認(rèn)為CW_USERDEFAULT //WINDOW_WIDTH: 窗口寬度;WINDOW_HEIGHT: 窗口高度 //父窗口句柄NULL; //菜單資源句柄NULL; //窗口所屬的應(yīng)用程序?qū)嵗木浔篽Instance //MFC中創(chuàng)建多文檔界面時(shí)用到,一般為NULL HWND hwnd = CreateWindow( L"ForTheDreamOfGameDevelop",WINDOW_TITLE, //喜聞樂見的創(chuàng)建窗口函數(shù)CreateWindow WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL ); //【4】窗口創(chuàng)建四步曲之四:窗口的移動(dòng)、顯示與更新 true:重畫窗口 MoveWindow(hwnd, 250,80,WINDOW_WIDTH, WINDOW_HEIGHT, true); //調(diào)整窗口顯示時(shí)的位置,使窗口左上角位于(250,80)處 ShowWindow( hwnd, nShowCmd ); //調(diào)用ShowWindow函數(shù)來顯示窗口 UpdateWindow(hwnd); //對(duì)窗口進(jìn)行更新,就像我們買了新房子要裝修一樣 //游戲資源的初始化,若初始化失敗,彈出一個(gè)消息框,并返回FALSE if (!Game_Init (hwnd)) { MessageBox(hwnd, L"資源初始化失敗", L"消息窗口", 0); //使用MessageBox函數(shù),創(chuàng)建一個(gè)消息窗口 return FALSE; } PlaySound(L"仙劍三·原版景天.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); //循環(huán)播放背景音樂 //【5】消息循環(huán)過程 MSG msg = { 0 }; //定義并初始化msg while( msg.message != WM_QUIT ) //使用while循環(huán),如果消息不是WM_QUIT消息,就繼續(xù)循環(huán) { if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看應(yīng)用程序消息隊(duì)列,有消息時(shí)將隊(duì)列中的消息派發(fā)出去。 { TranslateMessage( &msg ); //將虛擬鍵消息轉(zhuǎn)換為字符消息 DispatchMessage( &msg ); //分發(fā)一個(gè)消息給窗口程序。 } else //動(dòng)畫的關(guān)鍵部分 { g_tNow = GetTickCount(); //獲取當(dāng)前系統(tǒng)時(shí)間 if(g_tNow - g_tPre >= 100) //當(dāng)此次循環(huán)運(yùn)行與上次繪圖時(shí)間相差0.1秒時(shí)再進(jìn)行重繪操作 Game_Paint(hwnd); } } //【6】窗口類的注銷 UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance); //程序準(zhǔn)備結(jié)束,注銷窗口類 return 0; }//-----------------------------------【W(wǎng)ndProc( )函數(shù)】--------------------------------------// 描述:窗口過程函數(shù)WndProc,對(duì)窗口消息進(jìn)行處理//------------------------------------------------------------------------------------------------LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) //switch語句開始 { case WM_KEYDOWN: // 若是鍵盤按下消息 if (wParam == VK_ESCAPE) // 如果被按下的鍵是ESC DestroyWindow(hwnd); // 銷毀窗口, 并發(fā)送一條WM_DESTROY消息 break; // 跳出該switch語句 case WM_DESTROY: //若是窗口銷毀消息 Game_CleanUp(hwnd); //調(diào)用自定義的資源清理函數(shù)Game_CleanUp()進(jìn)行退出前的資源清理 PostQuitMessage( 0 ); //向系統(tǒng)表明有個(gè)線程有終止請(qǐng)求。用來響應(yīng)WM_DESTROY消息 break; //跳出該switch語句 default: //若上述case條件都不符合,則執(zhí)行該default語句 return DefWindowProc( hwnd, message, wParam, lParam ); //調(diào)用缺省的窗口過程 } return 0; //正常退出}//-----------------------------------【Game_Init( )函數(shù)】--------------------------------------// 描述:初始化函數(shù),進(jìn)行一些簡(jiǎn)單的初始化//------------------------------------------------------------------------------------------------BOOL Game_Init( HWND hwnd ){ HBITMAP bmp; g_hdc = GetDC(hwnd); //-----【位圖繪制四步曲之一:加載位圖】----- g_hSprite = (HBITMAP)LoadImage(NULL, L"goright.bmp", IMAGE_BITMAP, 480, 108, LR_LOADFROMFILE); g_hBackGround = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, LR_LOADFROMFILE); bmp = CreateCompatibleBitmap(g_hdc, WINDOW_WIDTH, WINDOW_HEIGHT); //建一個(gè)和窗口兼容的空的位圖對(duì)象 //-----【位圖繪制四步曲之二:建立兼容DC】----- g_mdc = CreateCompatibleDC(g_hdc); //創(chuàng)建一個(gè)和hdc兼容的內(nèi)存DC g_bufdc = CreateCompatibleDC(g_hdc); //再創(chuàng)建一個(gè)和hdc兼容的緩沖DC SelectObject(g_mdc, bmp); //將空位圖對(duì)象放到mdc中 g_iNum = 0; g_iX =0; //貼圖起始X坐標(biāo) g_iY= 350; //貼圖起始Y坐標(biāo) Game_Paint(hwnd); return TRUE;}//-----------------------------------【Game_Paint( )函數(shù)】--------------------------------------// 描述:繪制函數(shù),在此函數(shù)中進(jìn)行繪制操作//--------------------------------------------------------------------------------------------------VOID Game_Paint( HWND hwnd ){ if(g_iNum == 8) //判斷是否超過最大圖號(hào),若超過最大圖號(hào)“7”,則將顯示圖號(hào)重設(shè)為"0"。 g_iNum = 0; //-----【位圖繪制四步曲之三:選用位圖對(duì)象 】----- //將位圖對(duì)象選入到g_bufdc內(nèi)存DC中 //g_bufdc: 設(shè)備環(huán)境句柄 //g_hBackGround: 被選用對(duì)象的句柄 SelectObject(g_bufdc, g_hBackGround); //-----【位圖繪制四步曲之四:進(jìn)行貼圖】----- //g_mdc: 目標(biāo)環(huán)境句柄 //0:目標(biāo)DC的x坐標(biāo) //0: 目標(biāo)DC的y坐標(biāo) //WINDOW_WIDTH:貼到目標(biāo)DC的寬度 //WINDOW_HEIGHT: 貼到目標(biāo)DC的高度 //g_bufdc: 源設(shè)備環(huán)境句柄 //0: 源DC的x坐標(biāo) //0: 源DC的y坐標(biāo) //SRCCOPY: 貼圖方式,將源矩形區(qū)域直接拷貝到目標(biāo)矩形區(qū)域 BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY); //貼圖 //在mdc中進(jìn)行透明處理 SelectObject(g_bufdc, g_hSprite); //透明色彩法 //g_mdc: 目標(biāo)環(huán)境句柄 //g_iX:目標(biāo)DC的x坐標(biāo) //g_iY: 目標(biāo)DC的y坐標(biāo) //60:貼到目標(biāo)DC的寬度 //108: 貼到目標(biāo)DC的高度 //g_bufdc: 源設(shè)備環(huán)境句柄 //g_iNum*60: 源矩形左上角x坐標(biāo) //0: 源矩形左上角y坐標(biāo) //60:源矩形寬度 //108: 源矩形高度 //RGB(255, 0, 0):指定為透明色彩的RGB顏色值,紅色 TransparentBlt(g_mdc, g_iX, g_iY, 60, 108, g_bufdc, g_iNum*60, 0, 60, 108, RGB(255,0,0)); //采用TransparentBlt透明色彩法 //將最后的畫面顯示在窗口中 BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY); g_tPre = GetTickCount(); //記錄此次繪圖時(shí)間,供下次游戲循環(huán)中判斷是否已經(jīng)達(dá)到畫面更新操作設(shè)定的時(shí)間間隔。 g_iNum++; //將“g_iNum”值加1,為下一次要顯示的圖號(hào) g_iX += 10; //計(jì)算下次貼圖的坐標(biāo) //如果貼圖坐標(biāo)超出窗口邊緣,將其坐標(biāo)置為-60 if(g_iX >= WINDOW_WIDTH) g_iX =- 60;}//-----------------------------------【Game_CleanUp( )函數(shù)】--------------------------------// 描述:資源清理函數(shù),在此函數(shù)中進(jìn)行程序退出前資源的清理工作//---------------------------------------------------------------------------------------------------BOOL Game_CleanUp( HWND hwnd ){ //釋放資源對(duì)象 DeleteObject(g_hBackGround); DeleteObject(g_hSprite); DeleteDC(g_bufdc); DeleteDC(g_mdc); ReleaseDC(hwnd,g_hdc); return TRUE;}

運(yùn)行結(jié)果: 這里寫圖片描述


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产va在线观看 | 精品小视频 | 国产精品成人一区二区三区电影毛片 | 久久国产一级片 | 27xxoo无遮挡动态视频 | 欧美一级黄 | 精品久久中文网址 | 精品久久久久久久 | 91伊人久久| 久久久久久久黄色片 | 激情小说区 | 久久精品国产99国产精品澳门 | 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 羞羞答答xxdd在线播放 | 亚洲片在线观看 | 免费看真人a一级毛片 | 一级做a爱片久久毛片a高清 | 欧美成人一级片 | 久久久成人精品视频 | 久久久久久久久淑女av国产精品 | 一区二区三区日韩 | av国产免费 | 国产精品一区二区羞羞答答 | 精品久久久久久久久久久aⅴ | 激情综合婷婷久久 | 成人在线精品视频 | 91成人在线免费观看 | 国产精品亚洲一区二区三区在线观看 | 成人在线视频免费观看 | 一级看片免费视频 | 玩偶姐姐 在线观看 | 欧美日韩免费一区二区三区 | 久久影院一区二区三区 | 狠狠干天天操 | 黑人三级毛片 | 大片毛片| 国产大片在线观看 | 日本在线不卡免费 | 午夜激情视频免费 | 欧美日韩色片 | av在线免费不卡 |