FPS游戏:D3D内部游戏菜单实现
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内部游戏菜单实现相关推荐
- rust腐蚀怎么单人游戏_腐蚀RUST怎么提高帧数_腐蚀RUST提高FPS方法_52pk单机游戏
一.如何查看你当前的FPS.(steam办法) 一种方法是激活Steam FPS: 在Rust客户端关闭的情况下,进入主Steam程序窗口的"Steam"选项卡 点击"设 ...
- rust腐蚀怎么单人游戏_腐蚀游戏怎么提高帧数 Rust设置隐藏画质提高FPS教程
腐蚀游戏怎么提高帧数 Rust设置隐藏画质提高FPS教程 2018-03-04 10:58:10来源:游戏下载编辑:云曼衍评论(0) <腐蚀(Rust)>已经正式上市发售了,因为游戏的配置 ...
- java游戏开发入门(二) - 菜单
java游戏开发入门(二) - 菜单 前言 编码 主菜单 游戏内菜单(按下ESC后出现,并会暂停游戏) 效果展示 主菜单 游戏内菜单 完整代码 完整项目 前言 上一章我们创建了一个600x600的 ...
- 【从0到1实现多人FPS房间对战游戏】
从0到1实现FPS房间对战游戏 简介 服务器结构 序列化实现 demo获取 简介 基于godot开源客户端引擎和go开源游戏框架pitaya,实现经典多人3D房间fps射击游戏 立足开源才能站在巨人肩 ...
- 目前游戏行业内部主要几款游戏引擎的技术对比(转)
如果只有客户端的话,可以考虑用gamebryo,技术好一点,用ogre也可以,如果规模不大,用unity3d,如果很有钱,要效果很好的,用unreal3,bigworld是带服务器的,如果能力不够,最 ...
- [转]目前游戏行业内部主要几款游戏引擎的技术对比
如果只有客户端的话,可以考虑用gamebryo,技术好一点,用ogre也可以,如果规模不大,用unity3d,如果很有钱,要效果很好的,用unreal3,bigworld是带服务器的,如果能力不够,最 ...
- 【Iphone 游戏开发】游戏引擎剖析
为什么80%的码农都做不了架构师?>>> 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame. ...
- 《游戏机制——高级游戏设计技术》一1.1 规则定义游戏
本节书摘来异步社区<游戏机制--高级游戏设计技术>一书中的第1章,第1.1节,作者: [美]Ernest Adams 译者: 石曦 责编: 陈冀康,更多章节内容可以访问云栖社区" ...
- 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步
今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已. 所以 ...
最新文章
- WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
- java 解析csv_java解析CSV文件(getCsvData 解析CSV文件 zipFiles 打成压缩包 exportObeEventDataExcel 前端页面响应)...
- 分享Intel的安全运营中心最佳实践
- kafka 分区和副本以及kafaka 执行流程,以及消息的高可用
- SSM框架-使用MyBatis Generator自动创建代码
- Java: 在dos窗口输入密码,不要把密码直接显示出来,原来可以这么简单
- System.Diagnostics.Process 执行.EXE
- 关于Linux运行steam的解决方案
- 计算机网络的作用拓展图,拓扑图介绍及相关功能
- ADB Interface 找不到驱动程序 怎么破
- 再见PDF提取收费!我用100行Python代码搞定!
- U盘文件夹变成快捷方式解决方案
- 机器学习有哪些应用?可以用来做什么?
- linux系统变双屏,Ubuntu Linux下双屏显示解决方案
- sports.php什么意思,使用Yahoo Fantasy Sports API的PHP和JSON
- Servlet项目访问出错怎么办?
- 图灵奖得主,受聘上海大学名誉教授!
- Linux shell中的竖线(|)——管道符号
- Linux以及银河麒麟系统的一些基本认识
- Unity3d 换装 之 模型动画分离
热门文章
- HTTPS原理介绍以及证书签名的申请配置
- COUNT()函数详解
- C#界面里的winform AutoValidate和CausesValidation属性
- 企业ERP项目实施,遇见问题与心得分享
- 林夕给陈奕迅写的三首经典粤语歌解析,其中的《人来人往》被誉为粤语词作巅峰...
- maven jar包 私服 拉去问题,加载jar包时报错ReasonPhrase:unauthorized
- 《蜗居》里唯一的真男人只有宋思明
- Unknown command: crawl(爬虫框架Scrapy遇到的常见错误)
- 转盘活动的一些积累素材
- 2018-06-06-markdown-推荐markdown编辑器