自动挖图不是把鼠标固定在背包某个格子上反复点击。窗口大小、物品排列和系统缩放都会改变藏宝图在屏幕中的像素位置,因此金手指的挖图模块先读取当前画面,再在真实截图中查找藏宝图模板。只有得到候选位置以后,程序才安排鼠标移动与点击,并在下一轮重新截图。

这套流程的核心目标是让“看见什么”和“点击哪里”来自同一轮画面,而不是预先假设某个分辨率下第几格一定存在藏宝图。下面按照当前 treasure_digging.py 的模块职责说明各阶段,以及用户从日志中能判断哪些状态。

真实像素截图是识别起点

挖图模块会先启用 Windows DPI 感知,使截图坐标与鼠标坐标尽量处于同一个像素体系。它处理的是屏幕中的真实可见内容,因此藏宝图被其他窗口挡住、客户端最小化或界面尚未打开时,识别结果会如实为空。这个约束看似严格,却比对不可见窗口猜测坐标更容易验证。

模板加载后,程序在当前截图中搜索相似区域。不同窗口尺寸会让同一图标出现轻微缩放,所以识别并非只使用单一尺寸,而是在一组有限比例中匹配。有限比例的意义是覆盖常见变化,同时避免把模板缩放到失去图形特征。

自动挖图从截图到下一轮复核的识别闭环
自动挖图从截图到下一轮复核的识别闭环

为什么一个图标会产生多个候选框

模板匹配会在相邻像素位置计算相似度。同一张藏宝图可能在中心位置得到最高分,在周围几个位置也得到略低但仍超过阈值的分数。如果直接把所有结果当作不同物品,鼠标就会围绕同一个图标重复点击。

当前模块会把候选表示为位置、宽高、分数和缩放比例,再执行非极大值抑制。重叠程度高的候选只保留得分更合适的一个,使列表更接近画面中真实图标数量。去重发生在点击之前,因此日志中的检测数量应理解为去重后的可操作候选,而不是模板计算产生的全部像素峰值。

阈值也不是越低越容易成功。过低会把相似物品边框或背景纹理带入候选;过高则可能漏掉缩放、抗锯齿或亮度略有变化的图标。合理做法是用真实失败截图比较最高分与目标外观,再调整模板或有限尺度,而不是根据一次失败大幅下调。

点击阶段为什么仍要加入等待

程序找到候选以后,按候选中心附近安排点击。鼠标移动和点击之间保留自然的时间间隔,点击后也给界面留出响应时间。等待函数会定期检查停止事件,而不是一次长时间休眠;用户点击停止后,当前流程可以尽快结束,不必等整段延时完成。

每次点击都可能改变背包内容、打开使用提示或触发寻路,因此上一轮记录的其他坐标不应被无限期复用。更稳妥的循环是点击一个候选、等待界面变化、再次截图,再决定下一步。即使实现中一次取得多个候选,关键状态变化后也需要用新画面复核。

统计信息用来描述过程,不代表固定效果

挖图模块提供统计读取接口,记录识别和点击过程中的可见状态。这类数字用于本次运行日志和排错,不应被写成所有电脑都能达到的效果。显示器缩放、窗口布局、界面加载和模板外观都会影响一次运行。

如果日志连续显示没有候选,可以按以下顺序检查:

  • 藏宝图图标是否真的完整显示在当前桌面上;
  • 背包或相关界面是否被其他窗口遮挡;
  • 系统缩放与客户端窗口大小是否在运行中改变;
  • 当前图标外观是否与软件内置模板一致;
  • 失败截图里是否存在相似边框导致更高的错误候选;
  • 点击停止后日志是否已结束,而不是旧画面仍停留在屏幕上。

自动挖图与固定坐标脚本的区别

固定坐标脚本依赖“某个按钮永远在某处”。图像识别流程依赖“当前画面里先出现可确认目标”。前者步骤短,但窗口一移动就整体偏移;后者需要截图、匹配和去重,却能把目标位置从实际画面中计算出来。金手指的自动挖图采用后一种方式,并明确保留界面必须可见、模板外观需要一致的边界。

它也不是无限适配所有视觉变化。客户端 UI 更新、图标换肤或极端缩放超出模板范围时,仍需要重新采集真实样本。遇到这种情况应保留隐私处理后的失败截图和日志,而不是加入一个固定位置作为长期兜底,因为固定位置可能在下一次窗口变化后点击到无关区域。

运行前的简短准备

开始前先让梦幻西游手游时空客户端完整可见,关闭会遮挡背包区域的窗口,并固定显示缩放与客户端尺寸。确认任务日志区域可见,便于观察“加载模板、发现候选、执行点击、等待下一轮”等阶段。需要停止时直接使用软件的停止按钮,不要在鼠标按下过程中强制结束进程。

更完整的启动和窗口选择步骤可查看金手指使用教程。如果表现为目标识别到了但鼠标整体偏移,则先阅读窗口移动后的坐标适配说明,把截图问题与点击坐标问题分开记录。