资源描述:
《vc++游戏编程----游戏画面特效制作1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、有时候,我们需要在画面上显示一张角色的图像,而这张图片是有自己的背景的,要是直接贴到了游戏的画面中,就会出项覆盖游戏画面。显示出的效果特别不好,这里我们可以用到透明效果来处理。其中,原理就是用BitBlt()的Raster值运算去掉原图片的背影。但是只适用于原图背景为黑色,才会看到效果。如图,左边部分为前景图,右边部分为屏蔽图前景图的背景必须为黑色,屏蔽图的背景为白色以下为显示的背景图我们怎么样使用则会图来处理透明呢?其实就是Raster运算。将屏蔽图和背景图做“AND”运算,贴到目的DC;再将前景图和背景图做“OR”运算,贴到目的DC;现在开始编写程
2、序:在VS2008中新建Win32程序,使用VC默认的框架。首先定义全局变量:[cpp]viewplaincopyprint?1.HBITMAP bg, dra; //用来存储背景与前景图 2.HDC hdc; //用来暂时存储位图的DC HBITMAPbg,dra;//用来存储背景与前景图HDChdc;//用来暂时存储位图的DC然后在InitInstance()函数中,添加代码,绘制图形。[cpp]viewp
3、laincopyprint?1.BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 2.{ 3. HWND hWnd; 4. HDC hdc; 5. 6. hInst = hInstance; // 将实例句柄存储在全局变量中 7. 8. hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 9. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, N
4、ULL, 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 = CreateCompatibl
5、eDC(hdc); 22. //载入位图 23. bg = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, 1024, 768, LR_LOADFROMFILE); 1. dra = (HBITMAP)LoadImage(NULL, L"dra.bmp", IMAGE_BITMAP, 170, 99, LR_LOADFROMFILE); 2. 3. Paint(hdc); //绘制透明位图 4. ReleaseDC(hWnd, hdc); //释放DC
6、 5. return TRUE; 6.} BOOLInitInstance(HINSTANCEhInstance,intnCmdShow){HWNDhWnd;HDChdc;hInst=hInstance;//将实例句柄存储在全局变量中hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd){returnFALSE;}MoveWindow(hWnd,5
7、0,50,1024,768,true);ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);//建立窗口DC兼容DChdc=GetDC(hWnd);mdc=CreateCompatibleDC(hdc);//载入位图bg=(HBITMAP)LoadImage(NULL,L"bg.bmp",IMAGE_BITMAP,1024,768,LR_LOADFROMFILE);dra=(HBITMAP)LoadImage(NULL,L"dra.bmp",IMAGE_BITMAP,170,99,LR_LOADFROMFILE);
8、Paint(hdc);//绘制透明位图ReleaseDC(hWnd,hdc);//释放DCre