FPS游戏通用自瞄与透视算法详解!!

自瞄算法与实现:

1:首先我们要找到一个敌人的三维坐标。
2:我们还要找到自己的三维坐标。
3:我们还要找到自己的鼠标坐标X与Y(这里的鼠标坐标X与Y是角度,X为360,Y正中间为0向上减少到负90度,向下增加到90度)。
第一步 首先我们要计算自己与敌人坐标之间的差值,这里我们首先不考虑Z坐标:
FPS游戏通用自瞄与透视算法详解!!
这里的I代表自己的位置,E代表敌人的位置,我们用我们自己坐标的值减去敌人坐标的值就得到如下面这张图:
FPS游戏通用自瞄与透视算法详解!!
此时的Y1与X1就是我们与敌人之间的差值。
*
第二步 我们要计算自己与敌人的连线与X轴的夹角:
那么∠α的值就是我们所求的角,我们可以用反正切函数求出它,这里我们还要取它们的绝对值记为FX1与FY1:
∠α=atan((FY1/FX1));
这里计算的∠α是弧度,我们还要转成角度
∠α= ∠α×180/PI
此时的敌人是在第一象限,
所以我们还要接着来看第二象限:
FPS游戏通用自瞄与透视算法详解!!
*
在第二象限中:
∠α=atan((FX1/FY1)),(X与Y反过来了)
但是我们要求的是自己与敌人的连线与X轴的夹角,所以这里我们还要在加上90度;
∠α=atan((FX1/FY1));
∠α= ∠α180/PI+90;
自己想一想;
接着看第三象限:
FPS游戏通用自瞄与透视算法详解!!
此时
∠α=atan((FY1/FX1));
同样我们还要加上180度:
∠α=atan((FY1/FX1));
∠α= ∠α
180/PI+180;

第四象限:
FPS游戏通用自瞄与透视算法详解!!
∠α=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=鼠标角度与敌人之间的角度。
FPS游戏通用自瞄与透视算法详解!!
∠α是我们与敌人的连线与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);
}

这就是整个自瞄的算法了。