网络游戏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消息下面。
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第3篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第0篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第1篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第2篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第4篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第5篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第6篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第7篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第8篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第9篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第10篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第11篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第12篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第13篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第14篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第16篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第17篇上)
- ArcGIS 10.1 for Server 如何注册数据库(上)
- 从网站流量变化中分析搜索引擎的排名要素
- 线程
- 使用DBCC缩减数据库中log文件的大小
- VB 中App.Path的使用
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第3篇)
- 一个CEO的人生感言
- 杀掉(kill)Oracle中会话或死锁
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第4篇)
- ORACLE完全备份和增量备份
- Oracle快速创建定时job执行批量转储过程脚本参考案例
- Oracle系统存在latch free等待事件及运行超长SQL监控分析
- netsh切换IP地址
- 如何强制刷新Buffer Cache