三角洲A星-节点寻路详解function 直冲功能(x2, y2, 地图名)
-- ========== 初始化阶段 ==========
-- 获取角色当前朝向角度(通过特定屏幕区域的颜色判断)
-- 参数:(113,115) 到 (153,160) 的矩形区域,根据自身颜色判断角度
local 起始角度 = getSpecialAngle(113, 115, 153, 160, 自身颜色)
print(起始角度)
-- 在地图上查找当前位置
-- 使用图像匹配技术在小地图区域(60,80,208,200)查找当前位置
local result = op.screen.findImageEx {
source = 地图名, -- 地图图像源
target = {60, 80, 208, 200}, -- 搜索区域(小地图范围)
gray = true, -- 转为灰度图提高匹配效率
sim = 0.1, -- 相似度阈值(0.1表示90%相似度)
method = "TM_CCOEFF_NORMED", -- 使用归一化相关系数匹配算法
scale = {1.0, 1.0}, -- 保持原始比例
rotation = {0, 0}, -- 不进行旋转匹配
}
print(result)
-- 获取当前坐标(从图像匹配结果中提取)
local 当前坐标x = result.zx
local 当前坐标y = result.zy
-- 计算从当前位置到目标位置的角度
目标角度 = 计算游戏坐标角度(当前坐标x, 当前坐标y, x2, y2)
-- 如果当前朝向与目标角度相差超过4度,进行粗调校准
if math.abs(起始角度 - 目标角度) >= 4 then
校准转向(目标角度, 10) -- 快速转向到目标角度,精度10度
end
-- ========== 主循环:持续导航直到到达目标 ==========
u = 0 -- 状态标志:0=未开始移动,1=正在移动,3=已停止
while true do
-- 重新获取当前位置(实时更新)
local result = op.screen.findImageEx {
source = 地图名,
target = {60, 80, 208, 200},
gray = true,
sim = 0.1,
method = "TM_CCOEFF_NORMED",
scale = {1.0, 1.0},
rotation = {0, 0},
}
print(result)
-- 获取当前朝向角度
local 起始角度 = getSpecialAngle(113, 115, 153, 160, 自身颜色)
-- 更新当前坐标
local 当前坐标x = result.zx
local 当前坐标y = result.zy
local 当前角度 = 起始角度
-- 如果成功获取到坐标
if 当前坐标x ~= nil and 当前坐标y ~= nil then
-- 计算到目标的角度
local angle = 计算游戏坐标角度(当前坐标x, 当前坐标y, x2, y2)
-- ===== 视角微调 =====
-- 如果角度偏差在1-180度之间,进行慢速精确调整
-- 避免角度差接近180度时的反向旋转问题
if math.abs(起始角度 - angle) < 180 and math.abs(起始角度 - angle) > 1 then
慢速转视角(angle) -- 精确调整视角
end
-- 计算到目标点的直线距离
距离 = 计算坐标距离(当前坐标x, 当前坐标y, x2, y2)
-- ===== UI显示(实时显示导航信息)=====
-- 显示终点坐标(蓝色背景,白色文字,位置:209,692)
显示文本(文本框id1, "终点坐标:" .. x2 .. "," .. y2, 10, "0xFFFFFFFF", "0xAA0066FF", 209, 692)
-- 显示当前坐标(金色背景,白色文字,位置:48,692)
显示文本(文本框id, "当前坐标:" .. 当前坐标x .. "," .. 当前坐标y, 10, "0xFFFFFFFF", "0xFFFFD700", 48, 692)
-- 显示剩余距离(绿色背景,白色文字,位置:369,692)
显示文本(文本框id2, "距离:" .. 距离, 10, "0xFFFFFFFF", "0xFF00FF00", 369, 692)
-- ===== 移动控制逻辑 =====
-- 远距离(>=10):开始移动
if 距离 >= 10 and u == 0 then
pb11() -- 执行移动命令(可能是按键或点击)
u = 1 -- 标记为正在移动状态
end
-- 中距离(<10):停止移动,准备精确定位
if 距离 < 10 and u == 1 then
stop() -- 停止移动
sleep(200) -- 延迟200毫秒,等待角色完全停止
u = 3 -- 标记为已停止状态
end
-- 近距离(2-10):微调移动
if 距离 < 10 and 距离 >= 2 then
zl无延时(200) -- 执行短距离移动(可能是小步走)
end
-- 到达目标(<=4):结束导航
if 距离 <= 4 then
sleep(100) -- 短暂延迟确保稳定
break -- 退出循环,导航完成
end
end
end
end
工作原理解析:1. 坐标定位系统● 通过图像识别在小地图上定位角色当前位置
● 使用模板匹配算法(TM_CCOEFF_NORMED)实现精确定位
2. 角度控制系统● 通过颜色识别获取角色朝向
● 动态计算到目标点的角度
● 分级调整:粗调(>4度)和精调(1-4度)
3. 距离分级控制● 远距离(≥10):全速前进
● 中距离(<10):减速并准备停止
● 近距离(2-10):微调移动
● 到达范围(≤4):停止并结束
4. 状态机管理● 使用变量u管理移动状态
● 避免重复触发移动命令
● 确保移动过程的平滑性
5. 实时反馈● 持续更新并显示当前坐标、目标坐标和剩余距离
● 便于调试和监控导航过程
6. 配套代码网盘链接链接:https://pan.quark.cn/s/7e5949e08da2
提取码:3izW