OnmyojiAutoScript结界寄养经验收取卡顿问题分析与解决
问题背景
在OnmyojiAutoScript自动化脚本项目中,用户报告了一个关于结界寄养功能的bug:当脚本执行到收取经验步骤时会出现卡顿现象。通过日志分析发现,脚本在执行到点击收取经验按钮后便停止响应,导致整个流程无法继续。
问题现象分析
根据用户提供的日志和截图,我们可以清晰地看到问题发生的具体场景:
- 脚本正常进入结界寄养界面
- 执行收取经验操作时,点击了坐标为(902,162)的位置
- 随后脚本进入等待状态,最终因超时而报错
从代码层面来看,收取经验的逻辑是通过一系列图片识别和点击操作完成的。核心代码如下:
def harvest_card(self):
self.appear_then_click(self.I_A_HARVEST_EXP)
self.appear_then_click(self.I_A_HARVEST_FISH4)
self.appear_then_click(self.I_A_HARVEST_KAIKO_4)
self.appear_then_click(self.I_A_HARVEST_KAIKO_3)
self.appear_then_click(self.I_A_HARVEST_KAIKO_6)
self.appear_then_click(self.I_A_HARVEST_FISH_6)
self.appear_then_click(self.I_A_HARVEST_MOON_3)
self.appear_then_click(self.I_A_HARVEST_FISH_3)
根本原因
经过深入分析,发现问题出在图片识别环节。具体表现为:
- 脚本在收取经验后,需要识别结界卡界面以确认操作完成
- 原始代码中使用的图片匹配阈值设置过高(默认0.85)
- 由于游戏界面可能存在细微变化或渲染差异,导致无法准确匹配目标图片
- 截图显示,结界卡界面确实已经出现,但脚本未能识别
解决方案
针对这一问题,项目维护者提出了有效的解决方案:
- 调整图片匹配的相似度阈值从默认的0.85降低到0.7
- 这一调整能够在保证识别准确性的同时,提高对界面变化的容错能力
- 经过测试,修改后的阈值能够稳定识别结界卡界面
技术启示
这个问题为我们提供了几个重要的技术启示:
-
图像识别阈值的选择:在自动化测试或游戏脚本中,图像识别阈值的设置需要平衡准确性和容错性。过高会导致识别失败,过低则可能产生误识别。
-
异常处理机制:对于可能出现的卡顿情况,脚本应该设置合理的超时机制,并在超时后采取恢复措施,而不是直接报错退出。
-
界面变化的适应性:游戏界面可能会因版本更新、设备差异等原因产生变化,脚本设计时应考虑这些因素,提高鲁棒性。
总结
OnmyojiAutoScript项目中的这个结界寄养经验收取问题,典型地展示了自动化脚本开发中常见的图像识别挑战。通过调整匹配阈值这一简单而有效的方法,开发者成功解决了问题,同时也为类似场景的处理提供了参考方案。这提醒我们在开发自动化工具时,需要充分考虑实际运行环境的变化因素,设计更具弹性的识别和处理逻辑。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考