資源描述:
《VC游戲編程-游戲畫面特效制作1.doc》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、個人收集整理勿做商業(yè)用途有時候,我們需要在畫面上顯示一張角色的圖像,而這張圖片是有自己的背景的,要是直接貼到了游戲的畫面中,就會出項覆蓋游戲畫面。顯示出的效果特別不好,這里我們可以用到透明效果來處理。其中,原理就是用BitBlt()的Raster值運算去掉原圖片的背影。但是只適用于原圖背景為黑色,才會看到效果。如圖,左邊部分為前景圖,右邊部分為屏蔽圖前景圖的背景必須為黑色,屏蔽圖的背景為白色以下為顯示的背景圖我們怎么樣使用則會圖來處理透明呢?其實就是Raster運算。將屏蔽圖和背景圖做“AND”運算,貼到目的DC; 再將前景圖和背景圖做“OR”運算,貼到目的D
2、C;現在開始編寫程序:在VS2008中新建Win32程序,使用VC默認的框架。個人收集整理勿做商業(yè)用途首先定義全局變量:[cpp]viewplaincopyprint?1.HBITMAP?bg,?dra;????????????????????????????????//用來存儲背景與前景圖??2.HDC?hdc;????????????????????????????????????????//用來暫時存儲位圖的DC??HBITMAPbg,dra;??//用來存儲背景與前景圖HDChdc;???????//用來暫時存儲位圖的DC然后在InitInstance
3、()函數中,添加代碼,繪制圖形。[cpp]viewplaincopyprint?1.BOOL?InitInstance(HINSTANCE?hInstance,?int?nCmdShow)??2.{??3.???HWND?hWnd;??4.???HDC?hdc;??5.??6.???hInst?=?hInstance;?//?將實例句柄存儲在全局變量中??7.??8.???hWnd?=?Creat(yī)eWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW,??9.??????CW_USEDEFAULT,?0,?CW_
4、USEDEFAULT,?0,?NULL,?NULL,?hInstance,?NULL);??10.??11.???if?(!hWnd)??12.???{??13.??????return?FALSE;??14.???}??15.??16.???MoveWindow(hWnd,?50,?50,?1024,?768,?true);??17.???ShowWindow(hWnd,?nCmdShow);??18.???UpdateWindow(hWnd);??19.???//建立窗口DC兼容DC??20.???hdc?=?GetDC(hWnd);??21.???mdc
5、?=?Creat(yī)eCompat(yī)ibleDC(hdc);??22.???//載入位圖??23.???bg?=?(HBITMAP)LoadImage(NULL,?L"bg.bmp",?IMAGE_BITMAP,?1024,?768,?LR_LOADFROMFILE);??個人收集整理勿做商業(yè)用途1.???dra?=?(HBITMAP)LoadImage(NULL,?L"dra.bmp",?IMAGE_BITMAP,?170,?99,?LR_LOADFROMFILE);??2.??3.???Paint(hdc);??????//繪制透明位圖??4.???Releas
6、eDC(hWnd,?hdc);????//釋放DC??5.???return?TRUE;??6.}??BOOLInitInstance(HINSTANCEhInstance,intnCmdShow){ HWNDhWnd; HDChdc; hInst=hInstance;// 將實例句柄存儲在全局變量中hWnd=Creat(yī)eWindow(szWindowClass,szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0,CW_USEDEFAULT, 0, NULL,NULL,hInstance,NULL); if(!hWn
7、d) {?。騟turnFALSE; }MoveWindow(hWnd,50,50,1024,768,true); ShowWindow(hWnd,nCmdShow); Updat(yī)eWindow(hWnd); //建立窗口DC兼容DC?。瑁鋍=GetDC(hWnd); mdc=CreateCompatibleDC(hdc); //載入位圖bg= (HBITMAP)LoadImage(NULL, L"bg.bmp",IMAGE_BITMAP,1024,768,LR_LOADFROMFILE);dra= (HBITMAP)LoadImage(NULL,L"dra.
8、bmp",IMAGE_BITMAP,1