前情回顾
FPS方框透视辅助开发教学1:数据挖掘和基本绘制
https://www.52xuejishu.com/forum-post/337.html
FPS方框透视辅助开发教学2:编写代码读取玩家数据
https://www.52xuejishu.com/forum-post/339.html
FPS方框透视辅助开发教学3:屏幕坐标转换算法、绘制文本到敌人
https://www.52xuejishu.com/forum-post/340.html
想学习游戏辅助开发没地方?
来这里,我们有基础版299和专业版2024
【基础版】包含4套教学,赠送价值158过检测过保护CE
B站平台可直达下单,手机访问效果最佳
包含:
学习游戏安全,加入游戏安全逆向基础版社区,现在优惠价299
游戏安全逆向:入门科普大全解
https://study.163.com/course/courseMain.htm?courseId=1212474809&share=2&shareId=1020678503
游戏安全逆向工程师:CE基础
https://study.163.com/course/courseMain.htm?courseId=1209141829&share=2&shareId=1020678503
C语言0基础入门游戏辅助开发实践
https://study.163.com/course/courseMain.htm?courseId=1213365801&share=2&shareId=1020678503
易语言0基础游戏辅助电脑脚本开发(正在更新ing)
https://study.163.com/course/courseMain.htm?courseId=1213780852&share=2&shareId=1020678503
优惠下单链接,学习游戏修改作弊、辅助脚本开发、飞天遁地透视自瞄辅助技术,您的最佳选择:
平台下单地址https://mall.bilibili.com/neul-next/detailuniversal/detail.html?isMerchant=1&page=detailuniversal_detail&saleType=10&itemsId=11262567&loadingShow=1&noTitleBar=1
下单后承诺以上四套内容全部开通在网易云课堂、永久观看时效、指导答疑
下单后即赠送过网络游戏检测保护的CE游戏修改器一套(价值158)
【专业版】包含12套教学,内容更多,工具更丰富,详情联系i-xiaodi
前言
我们接着上一次的内容分析
依次从第一象限,拓展到完整的四个象限
并且分析角度大于180的情况
第二象限分析
做如下标记,可求得:
β - α(已知鼠标角度) = γ
tanθ = 敌我x差值(已知)/ 敌我y差值(已知)
θ = arctan(tanθ)
β = θ + 90
进一步可得:
鼠标朝向和敌人夹角γ = (θ + 90)(已知敌人偏角) - α(已知鼠标角度)
但这里我们需要注意的是夹角的意义:需要计算的是“鼠标当前方向需要旋转多少角度才能对准敌人”。这相当于:鼠标当前角度(参考系) – 敌人方位角(目标方向),所以我们需要让符号保持坐标系的正负方向准则,而不是单纯求角度
所以四个象限我们都默认使用
鼠标朝向和敌人夹角γ =α(已知鼠标角度) - 敌人偏角
结果如果是负的,
意味着鼠标朝向在敌我连线的左边,需要绘制在左边
结果如果是正的,
意味着鼠标朝向在敌我连线的右边,需要绘制在右边
在计算“鼠标朝向和敌人夹角”时,使用 Angle_me_X - 敌人偏角
而非反向的原因与角度方向的定义和屏幕坐标投影的数学逻辑密切相关。以下是关键点分析:
1. 角度方向的定义
Angle_me_X
表示鼠标当前朝向的绝对角度(通常以 X 轴正方向为 0°,逆时针增加)。敌人偏角
是敌人相对于自身位置的方位角(通过象限计算得出)。- 夹角的意义:需要计算的是“鼠标当前方向需要旋转多少角度才能对准敌人”。这相当于:
鼠标当前角度(参考系) – 敌人方位角(目标方向)。
2. 第二象限的特殊性
在第二象限中:
- 敌人偏角 的计算公式为
atan(fabs(敌我相对X/敌我相对Z)) * 180/π + 90
,对应角度范围为 90°~180°。 - 逻辑矛盾:若直接使用
敌人偏角 - Angle_me_X
,相当于以敌人方向为基准,试图计算鼠标需要反向旋转的角度。这会破坏以下逻辑:
-
- 屏幕坐标投影 依赖
sin
和cos
的符号决定方向。 - 错误的差值符号 会导致
敌人屏幕粗略坐标边长
的符号反转,最终绘制的坐标偏移到相反方向。
- 屏幕坐标投影 依赖
3. 数学验证
假设在第二象限中:
敌人偏角 = 120°
,Angle_me_X = 100°
。- 正确差值:
100° - 120° = -20°
→sin(-20°) = -0.342
,cos(-20°) ≈ 0.94
。 - 错误差值:
120° - 100° = 20°
→sin(20°) = 0.342
,cos(20°) ≈ 0.94
。 - 结果对比:
-
- 正确时:
敌人屏幕粗略坐标边长
为负,绘制在屏幕左侧(符合第二象限的 X 负方向)。 - 错误时:
敌人屏幕粗略坐标边长
为正,绘制在屏幕右侧(与实际象限矛盾)。
- 正确时:
4. 根本原因
- 角度差的方向性:
Angle_me_X - 敌人偏角
直接表示“从鼠标当前方向到敌人方向需要旋转的角度”,其符号决定了屏幕投影的正负。 - 三角函数对称性:
sin(-θ) = -sinθ
,cos(-θ) = cosθ
。保持正确的符号是屏幕坐标计算的关键。
结论
代码中统一使用 Angle_me_X - 敌人偏角
是为了保证:
- 角度差的符号正确反映敌人相对于鼠标方向的左右位置。
sin
和cos
的符号正确映射到屏幕坐标系。
若在第二象限单独反向计算,会破坏数学一致性,导致投影方向错误。
四象限拓展及代码实现
按照第二象限的方法进行拓展,方法是确认敌人和鼠标朝向,并构建三角形,进行计算
在此不做额外的画图和赘述,大家可自行动手画图解析
如下为四个象限的代码实现,并且打印出相对应的信息
夹角大于180的情况
第一种情形,鼠标朝向角度 > 敌人偏角
假设敌人夹角是 45 度
,此时鼠标朝向差不多到了 90*3 + 30 = 300 度
而且假设鼠标朝向在下是屏幕右边,绘制应该往左绘制
那么鼠标朝向角度 - 敌人偏角 > 180
的情况应该是:
鼠标朝向和敌人夹角 = (360 - 鼠标朝向角度 + 敌人偏角) * -1
依次类推,假设第二种情形,敌人偏角 > 鼠标朝向角度
那么敌人偏角 - 鼠标朝向角度 > 180
的情况应该是:
鼠标朝向和敌人夹角 = 360 - 敌人偏角 + 鼠标角度
//夹角大于180朝向算法调整
if (敌人偏角 - Angle_me_X > 180)
{
鼠标朝向和敌人夹角 = 360 - 敌人偏角 + Angle_me_X;
}
if (Angle_me_X - 敌人偏角 > 180)
{
鼠标朝向和敌人夹角 = (360 - Angle_me_X + 敌人偏角) * -1;
}
高度轴调整分析
由图可知,对边 + 敌我高度差值 = 高度偏移的位置
tanα = 对边 / 2d 距离
所以高度偏移的位置
= 2d 距离 * tanα + 敌我高度差值
那么 384 – x/y * 384就是敌人在屏幕 y 上的偏移了
最终结果也就是
384 - (2d 距离 * tanα + 敌我高度差值) / 2d 距离 * 384
也就是
384
– 高度偏移的位置 / 2d 距离 * 384
为何是减号?
屏幕坐标系通常是 左上角为原点 (0,0)
,Y轴向下为正方向。这意味着:
-
敌人高度高于你(
敌我相对y > 0
)时,屏幕Y坐标应 小于中心值 384(向上偏移)。 -
敌人高度低于你(
敌我相对y < 0
)时,屏幕Y坐标应 大于中心值 384(向下偏移)。
原公式 屏幕y = 384 + 敌人屏幕高度偏移的位置 / 二维距离 * 512
的 +
会导致:
-
敌人屏幕高度偏移的位置
为正时(敌人在上方),Y坐标 增大,文字反而向下移动,与实际位置相反。 -
改为
-
后,符号逻辑与坐标系方向一致,解决反向偏移问题。
测试视频
结语
剩下的工作:
1.利用遍历读取全部玩家数据
2.绘制方框到敌人
3.完善其他细节
没有回复内容