• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

FPS游戏D3D内部游戏菜单实现

武飞扬头像
微软技术分享
帮助1

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

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

外部D3D绘制模块

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

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

学新通

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

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

内部D3D绘制模块

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

学新通

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggegak
系列文章
更多 icon
同类精品
更多 icon
继续加载