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消息下面。
最后
以上就是能干柚子最近收集整理的关于网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第3篇)的全部内容,更多相关网络游戏demo开发实例:多人在线RPG游戏(MMO内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复