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篇)相关推荐

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

    最近在业余时间制作一个MMO RPG的demo,代码提交在github上,有兴趣的朋友可以自己导出代码(https://github.com/changjixiong/MMO-RPGGame), 方法 ...

  2. 使用FLEX3开发大型多人在线游戏

    使用FLEX3开发大型多人在线游戏 2009-09-02 10:07 使用FLEX3开发大型多人在线游戏 收藏 使用FLEX3开发大型多人在线游戏 大型多人在线游戏(MMO)技术已经涉足到各种软件形式 ...

  3. 使用Adobe Flex 3开发大型多人在线游戏

    使用Adobe Flex 3开发大型多人在线游戏 2011年03月28日 大型多人在线游戏(MMO) 技术已经涉足到各种软件形式中了. 当我们还在思考MMO 时, 多人游戏已经使很多玩家能够实时连接进 ...

  4. 全球最大多人在线创作游戏Roblox暂时关闭 官方称将尽快恢复运行

    10月31日消息,据网友爆料,世界最大的多人在线创作游戏Roblox近日突然下线. Roblox官网只留下了一张图片,图片显示,"正在让事情变得更好,稍后就会回来". 10月29日 ...

  5. 想要和朋友一起打猎吗?狩猎场Online多人在线打猎游戏,快来玩吧!

    想要和朋友一起打猎吗?狩猎场Online多人在线打猎游戏,快来玩吧! posted on 2016-08-15 22:47 雨亭 阅读( ...) 评论( ...) 编辑 收藏 转载于:https:/ ...

  6. java编写rgp游戏地图,unity RPG游戏地图编辑 RPG Map Editor v1.5.5

    描述 unity RPG游戏地图编辑 RPG Map Editor v1.5.5 所支持的Unity版本:5.3.1 及以上版本 Fully Supports Unity 5! Create an R ...

  7. 从零开始完整开发基于websocket的在线对弈游戏【五子棋】,只用几十行代码完成全部逻辑。

    五子棋是规则简单明了的策略型游戏,先形成五子连线者获胜. 本课程习作采用两人在线对弈的方式进行比赛,拿着手机在上下班路上玩特别合适. 整个过程在众触低代码应用平台进行,使用表达式描述游戏逻辑(高度简化 ...

  8. 正在做的一款HTML5多人在线扑克牌游戏:99分

    用Node.JS做服务端,用WebSockets通信,实现HTML5多人在线游戏. 这款扑克牌游戏名称叫99分,源于活动聚会时常多人玩的一种扑克游戏,特别适合6人.8人.10人玩. 这个游戏由3个爱好 ...

  9. 多人在线斗地主游戏开发——自定义TCP网络通信协议包格式

    什么叫做通信协议?为什么制定通信协议? 怎么制定通信协议? 不知道大家有没有迷茫过这个问题,反正我是有的,,, 想我在刚接触网络编程的时候,是linux下用socket懵懵懂懂地按照pdf书籍上的代码 ...

最新文章

  1. 一个TreeView 样式表
  2. Android layout 优化:使用include和merge 标签
  3. 使用iostat分析IO性能
  4. Flink Forward Asia 2020 - Keynote 总结
  5. android 设置PopupWindow透明度
  6. 数据结构练习 00-自测3. 数组元素循环右移问题 (20)
  7. linux openh264 编译,在Linux下为Android构建openh264
  8. oracle 时间按季度,ORACLE时间字段取年、月、日、季度
  9. TIOBE 3 月编程语言排行榜:Ruby 重回前十,Kotlin 突围
  10. opencv 显示程序运行时间
  11. Mybatis参数Integer类型值为0 源码处理
  12. 关于co-NP的理解
  13. 撤销工作表保护原密码_批量解除工作表保护,和批量执行保护一样简单
  14. k3导入账套_金蝶K3财务操作流程
  15. 通过网易云api实现一个简单的音乐播放器
  16. 台式计算机最新配置,例举2019推荐组装台式电脑最新配置清单
  17. win10重装系统(正版)(好用)(带激活方法)
  18. 推荐几个中文在线音乐网站
  19. UE4 自定义按键事件(踩坑记录)
  20. 常见硬件接口汇总(未完待续)

热门文章

  1. 【GDI】BitBlt()函数用法
  2. python宣传口号,Python会议口号
  3. 微服务高并发秒杀实战
  4. 通达信凹口平量柱选股公式,倍量柱之后调整再上升
  5. Eigendecomposition, SVD and PCA
  6. Oracle + SQL 学习笔记
  7. 【报告分享】2020年中国社交娱乐视频研究报告.pdf(附下载链接)
  8. Introduce to AWK utility
  9. wordpress搏客用户注册收不到邮件解决办法
  10. 阿里云socket端口不通的解决方案