网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第3篇)

来源:互联网 发布:网页版组态软件 编辑:程序博客网 时间:2024/05/02 00:58

version4

主要内容:透明贴图

所属部分:客户端

代码地址 https://github.com/changjixiong/MMO-RPGGame, 如何获得代码,请参考如何用SVN从github上检出代码的不同版本

邮件地址:changjixiong@gmail.com

本系列目录


下面这段代码用于生成透明位图


bitBlackBack=CreateCompatibleBitmap(hdcScreen, Width, Height);bitMask=CreateBitmap(Width, Height, 1, 1, NULL);hdcBlackBack=CreateCompatibleDC(hdcScreen);hdcMask=CreateCompatibleDC(hdcScreen);bitOldBlackBack=(HBITMAP)SelectObject(hdcBlackBack,bitBlackBack);bitOldMask=(HBITMAP)SelectObject(hdcMask,bitMask);BitBlt(hdcBlackBack, 0, 0, Width, Height, hdcOriginal, 0, 0, SRCCOPY);SetBkColor(hdcBlackBack, RGB(255,255,255));BitBlt(hdcMask, 0, 0, Width, Height, hdcBlackBack, 0, 0, SRCCOPY);SetBkColor(hdcBlackBack, RGB(0,0,0));SetTextColor(hdcBlackBack, RGB(255,255,255));BitBlt(hdcBlackBack, 0, 0, Width, Height, hdcMask, 0, 0, SRCAND);


然后用下面的代码,完成透明贴图

BitBlt(hdcDest, x, y, Width, Height, hdcMask, 0, 0, SRCAND);BitBlt(hdcDest, x, y, Width, Height, hdcBlackBack, 0, 0, SRCPAINT);

稍微说明一下
hdcBlackBack=CreateCompatibleDC(hdcScreen);bitOldBlackBack=(HBITMAP)SelectObject(hdcBlackBack,bitBlackBack);
生成hdcBlackBack,并将一个单色位图选入,这个时候hdcBlackBack贴出来,就是一个黑块,如图:


BitBlt(hdcBlackBack, 0, 0, 22, 42, hdcOriginal, 0, 0, SRCCOPY);

以后,hdcBlackBack里面就是原图的内容,hdcBlackBack贴出来的效果如图:



SetBkColor(hdcBlackBack, RGB(255,255,255));    BitBlt(hdcMask, 0, 0, 22, 42, hdcBlackBack, 0, 0, SRCCOPY);

生成一个白色背景,黑色剪影的图,hdcMask贴出来的效果如图:


SetBkColor(hdcBlackBack, RGB(0,0,0));SetTextColor(hdcBlackBack, RGB(255,255,255));BitBlt(hdcBlackBack, 0, 0, 22, 42, hdcMask, 0, 0, SRCAND);

生成一个黑色背景的人物图,hdcBlackBack贴出来效果是这样的:


BitBlt(hdcDest, x, y, 22, 42, hdcMask, 0, 0, SRCAND);

在地图上打个洞,效果是这样的:


打洞以后,在做下面的操作

BitBlt(hdcDest, x, y, 22, 42, hdcBlackBack, 0, 0, SRCPAINT);

产生最终效果:


代码运行会感觉人物闪的厉害,因为while函数里面一轮太快了,下一版将贴图移动到WM_TIMER消息下面。



原创粉丝点击