FPS游戏通用自瞄与透视算法详解!!
自瞄算法与实现:
1:首先我们要找到一个敌人的三维坐标。
2:我们还要找到自己的三维坐标。
3:我们还要找到自己的鼠标坐标X与Y(这里的鼠标坐标X与Y是角度,X为360,Y正中间为0向上减少到负90度,向下增加到90度)。
第一步 首先我们要计算自己与敌人坐标之间的差值,这里我们首先不考虑Z坐标:
这里的I代表自己的位置,E代表敌人的位置,我们用我们自己坐标的值减去敌人坐标的值就得到如下面这张图:
此时的Y1与X1就是我们与敌人之间的差值。
*
第二步 我们要计算自己与敌人的连线与X轴的夹角:
那么∠α的值就是我们所求的角,我们可以用反正切函数求出它,这里我们还要取它们的绝对值记为FX1与FY1:
∠α=atan((FY1/FX1));
这里计算的∠α是弧度,我们还要转成角度
∠α= ∠α×180/PI
此时的敌人是在第一象限,
所以我们还要接着来看第二象限:
*
在第二象限中:
∠α=atan((FX1/FY1)),(X与Y反过来了)
但是我们要求的是自己与敌人的连线与X轴的夹角,所以这里我们还要在加上90度;
∠α=atan((FX1/FY1));
∠α= ∠α180/PI+90;
自己想一想;
接着看第三象限:
此时
∠α=atan((FY1/FX1));
同样我们还要加上180度:
∠α=atan((FY1/FX1));
∠α= ∠α180/PI+180;
第四象限:
∠α=atan((FX1/FY1));
∠α= ∠α*180/PI+270;
这里加上270度相信大家也明白了;
这里还有四种简单的情况:
当敌人在X轴的正半轴:
那么 ∠α=0;
当敌人在Y轴的正半轴:
那么 ∠α=90;
当敌人在X轴的负半轴:
那么 ∠α=180;
当敌人在Y轴的负半轴:
那么 ∠α=270;
好了基本的角度计算完毕现在我们需要我们的鼠标X角度了,这里我将它定义为:
Bufferx=鼠标X角度;
一些游戏中鼠标X角度的值并不是360而是当值增加到180后会变成负数这里我们只要运算一下
if(Bufferx<0)
{
Bufferx=360+Bufferx;
}
那么我们鼠标的角度与敌人之间的角度我定义为:
C=鼠标角度与敌人之间的角度。
∠α是我们与敌人的连线与X轴的夹角
而我们要求的是我们鼠标所指向的X角度与敌人之间的角度大小也就是:
∠C
∠C=Bufferx-∠α;
这里不止这么简单还有另外两种情况:
if (∠α - Bufferx > 180)
{
C = 360 - ∠α + Bufferx;
}
if (Bufferx - ∠α > 180)
{
C = (360 - Bufferx + ∠α)*-1;
}
所以 AiMBot=自瞄角度;
AiMBot=Bufferx—C;
只要将AiMBot的值写入存放鼠标X坐标的地址就行了;
关于上面怎样判断在第几象限只要判断
X1与Y1是否大于0,或者是否小于0;
还有就是鼠标Y的值可以写入为0,这样就永远指向正中间;
还可以写一个热键监视,当我们按下鼠标右键是就执行自瞄算法:
while (true)
{
if (GetAsyncKeyState(VK_RBUTTON))//
{
zhimiao();(填整个自瞄的算法,包括写入鼠标数据)
}
Sleep(1);
}
这就是整个自瞄的算法了。
FPS游戏通用自瞄与透视算法详解!!相关推荐
- 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他
FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...
- html5 游戏 算法,JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】...
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解[圆形情况] 发布时间:2020-10-10 13:42:43 来源:脚本之家 阅读:95 作者:krapnik 本文实例讲述了JS/HTML ...
- YOLOv5算法详解
目录 1.需求解读 2.YOLOv5算法简介 3.YOLOv5算法详解 3.1 YOLOv5网络架构 3.2 YOLOv5实现细节详解 3.2.1 YOLOv5基础组件 3.2.2 输入端细节详解 3 ...
- JDA人脸检测算法详解
JDA人脸检测算法详解: 第一步: JDA算法原理详解: 作者建立了一个叫post classifier的分类器,方法如下: 1.样本准备:首先作者调用OpenCV的Viola-Jones分类器,将r ...
- YOLOv4算法详解
YOLOv4: Optimal Speed and Accuracy of Object Detection-论文链接-代码链接 目录 1.需求解读 2.YOLOv4算法简介 3.YOLOv4算法详解 ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...
- FloodFill算法详解及应用
FloodFill算法详解及应用 啥是 FloodFill 算法呢, 最直接的一个应用就是「颜色填充」,就是 Windows 绘画本中那个小油漆桶的标志,可以把一块被圈起来的区域全部染色. 这种算法思 ...
- CenterNet算法详解
Objects as Points-论文链接-代码链接 目录 1.需求解读 2.CenterNet算法简介 3.CenterNet算法详解 3.1 CenterNet网络结构 3.2 CenterNe ...
最新文章
- 用它调试线上bug,真得劲!
- Michael Jordan:人工智能研究的目标变了,不再是构建单个智能
- 元组Tuple、数组Array、映射Map
- 康力优蓝发布新品:让AI教育从概念变成现实!
- python打包工具报错_Python打包发布神器—Pyinstaller
- 正则表达式与神经网络的深度融合
- Java黑皮书课后题第5章:5.8(找出得最高分的学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生
- Eclipse下搭建C语言开发环境
- rrdtool zabbix mysql_MRTG、Cacti、Rrdtool、Nagios、Zabbix安装比较
- java icache_java手写多级缓存
- gVim取消自动备份
- CentOS6.7系统优化加强牢固脚本
- 低智商社会,娱乐至死,2书推荐,世界12大理论,
- 总结常见的10种破解密码方法
- html如何生成条形码,前端使用JsBarcode生成条形码
- 计算机发展史观后感50字,《计算机:一部历史》读后感_1300字
- 【金三银四】一个问题就知道你会不会CSS了
- 64位系统编译32位程序报错
- 【Docker学习笔记 三】Docker常用容器安装及图形化管理工具
- 云服务器就是虚拟主机,为什么很多人说云主机就是虚拟主机?