19年发布了一篇《FPS游戏:实现GDI方框透视》这篇文章,本篇文章中使用到的技术是外部GDI绘制,该绘制模式在Win10系统中如果不关闭毛玻璃效果则绘制会失效,为了解决绘制失效的窘境,故本人将代码从易语言顺利移植成了C/C++并使用注入的方式劫持绘图函数实现内部D3D绘制,如下本人将具体分析如何实现的内部绘制。

首先在外部GDI绘制时,您肯定发现了,在WindowsXP系统下绘制出来的无论是方框还是文字都会频繁闪烁,而在Win10系统,由于启用了毛玻璃效果,则外部GDI绘制干脆躺平了,这就很尴尬。

本人通过C/C++封装实现了D3D内部与外部多种绘制方法,接下来将逐一分析代码是如何实现的。

外部D3D绘制模块

所谓外部D3D绘制,其实现原理是,通过在外部创建顶层窗体,并每隔指定毫秒数,自动附加窗体到目标进程上,我们所有的绘制操作都是在自身进程上实现的。

这种方式绘制出来的方框或菜单,都有一个显著的特点,首先占用CPU过高,且当有其他窗体覆盖到游戏顶层时,则绘制出来的菜单或方框将会被置顶,如下效果:

至于外部绘制如何监控热键,我们可以使用RegisterHotKey(NULL, 1, 0, VK_UP);注册,由于是外部,因此不需要热键回调,所以只需要注册即可全局生效。

菜单的绘制,很简单,首先一个外包矩形,矩形的大小需要自己计算得到,你有几个功能则矩形就需要有多长,矩形内部嵌套一个小矩形,当用户按下上下左右时,我们默认让其自动移动位置,这个移动位置是通过下标计算得出的偏移,根据计算的得出的偏移值,从而实现动态移动,当用户选中某个菜单项时,则全局变量负责接收,并判断功能即可。

内部D3D绘制模块

相对于外部D3D绘制模块来说,则不存在以上问题,与外部绘制不同,内部绘制需要控制转接函数,在原始绘图函数工作之前,需要增加新的绘制方法,内部绘制效率时最高的,且内部绘制不存在占用CPU资源高的情况,一般绘制出来的效果如下:

如上,很明显内部绘制与父进程已经融合了,并不存在挡住的情况,但内部绘制使用RegisterHotKey()无法注册热键,需要将自身热键注册到父窗体回调事件中才可以,所以代码上也需要增加一些。

FPS游戏:D3D内部游戏菜单实现相关推荐

  1. rust腐蚀怎么单人游戏_腐蚀RUST怎么提高帧数_腐蚀RUST提高FPS方法_52pk单机游戏

    一.如何查看你当前的FPS.(steam办法) 一种方法是激活Steam FPS: 在Rust客户端关闭的情况下,进入主Steam程序窗口的"Steam"选项卡 点击"设 ...

  2. rust腐蚀怎么单人游戏_腐蚀游戏怎么提高帧数 Rust设置隐藏画质提高FPS教程

    腐蚀游戏怎么提高帧数 Rust设置隐藏画质提高FPS教程 2018-03-04 10:58:10来源:游戏下载编辑:云曼衍评论(0) <腐蚀(Rust)>已经正式上市发售了,因为游戏的配置 ...

  3. java游戏开发入门(二) - 菜单

    java游戏开发入门(二) - 菜单 前言 编码 主菜单 游戏内菜单(按下ESC后出现,并会暂停游戏) 效果展示 主菜单 游戏内菜单 完整代码 完整项目 前言   上一章我们创建了一个600x600的 ...

  4. 【从0到1实现多人FPS房间对战游戏】

    从0到1实现FPS房间对战游戏 简介 服务器结构 序列化实现 demo获取 简介 基于godot开源客户端引擎和go开源游戏框架pitaya,实现经典多人3D房间fps射击游戏 立足开源才能站在巨人肩 ...

  5. 目前游戏行业内部主要几款游戏引擎的技术对比(转)

    如果只有客户端的话,可以考虑用gamebryo,技术好一点,用ogre也可以,如果规模不大,用unity3d,如果很有钱,要效果很好的,用unreal3,bigworld是带服务器的,如果能力不够,最 ...

  6. [转]目前游戏行业内部主要几款游戏引擎的技术对比

    如果只有客户端的话,可以考虑用gamebryo,技术好一点,用ogre也可以,如果规模不大,用unity3d,如果很有钱,要效果很好的,用unreal3,bigworld是带服务器的,如果能力不够,最 ...

  7. 【Iphone 游戏开发】游戏引擎剖析

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame. ...

  8. 《游戏机制——高级游戏设计技术》一1.1 规则定义游戏

    本节书摘来异步社区<游戏机制--高级游戏设计技术>一书中的第1章,第1.1节,作者: [美]Ernest Adams 译者: 石曦 责编: 陈冀康,更多章节内容可以访问云栖社区" ...

  9. 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步

    今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已. 所以 ...

最新文章

  1. WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
  2. java 解析csv_java解析CSV文件(getCsvData 解析CSV文件 zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)...
  3. 分享Intel的安全运营中心最佳实践
  4. kafka 分区和副本以及kafaka 执行流程,以及消息的高可用
  5. SSM框架-使用MyBatis Generator自动创建代码
  6. Java: 在dos窗口输入密码,不要把密码直接显示出来,原来可以这么简单
  7. System.Diagnostics.Process 执行.EXE
  8. 关于Linux运行steam的解决方案
  9. 计算机网络的作用拓展图,拓扑图介绍及相关功能
  10. ADB Interface 找不到驱动程序 怎么破
  11. 再见PDF提取收费!我用100行Python代码搞定!
  12. U盘文件夹变成快捷方式解决方案
  13. 机器学习有哪些应用?可以用来做什么?
  14. linux系统变双屏,Ubuntu Linux下双屏显示解决方案
  15. sports.php什么意思,使用Yahoo Fantasy Sports API的PHP和JSON
  16. Servlet项目访问出错怎么办?
  17. 图灵奖得主,受聘上海大学名誉教授!
  18. Linux shell中的竖线(|)——管道符号
  19. Linux以及银河麒麟系统的一些基本认识
  20. Unity3d 换装 之 模型动画分离

热门文章

  1. HTTPS原理介绍以及证书签名的申请配置
  2. COUNT()函数详解
  3. C#界面里的winform AutoValidate和CausesValidation属性
  4. 企业ERP项目实施,遇见问题与心得分享
  5. 林夕给陈奕迅写的三首经典粤语歌解析,其中的《人来人往》被誉为粤语词作巅峰...
  6. maven jar包 私服 拉去问题,加载jar包时报错ReasonPhrase:unauthorized
  7. 《蜗居》里唯一的真男人只有宋思明
  8. Unknown command: crawl(爬虫框架Scrapy遇到的常见错误)
  9. 转盘活动的一些积累素材
  10. 2018-06-06-markdown-推荐markdown编辑器