回答
脚本出现“直接运行结束”或“运行后无反应/无法正常使用”,通常由权限缺失、界面识别失败或逻辑阻塞导致。以下是针对你当前问题的排查与解决方法:
一、 脚本启动后直接运行结束
根本原因:Hamibot 依赖 Android 无障碍服务与后台弹窗权限执行自动化操作。权限未授予时,脚本无法获取界面控制权,会直接退出。
解决步骤:
- 进入手机「设置」→「无障碍」→ 找到 Hamibot 并开启服务。
- 进入「设置」→「应用管理」→ Hamibot → 权限管理 → 开启“后台弹出界面”(部分机型称为“显示在其他应用上层”)。
- 重启 Hamibot 客户端,重新运行脚本。
二、 脚本运行但无法正常使用或无反应
根本原因:五子棋等游戏界面通常使用自定义绘制(Canvas/OpenGL),标准控件查找方法(如 text()、id()、className())无法识别元素;或脚本缺少状态判断、等待时间不足、逻辑陷入阻塞。
排查与优化步骤:
- 确认识别方式:游戏棋盘多为自定义视图,无障碍服务无法捕获控件。需改用坐标点击
click(x, y)或图像识别images.findColor()/images.matchTemplate()。 - 添加状态等待与日志:使用
sleep()避免操作过快,用console.log()输出关键节点,确认脚本执行到哪一步。 - 检查逻辑阻塞:避免使用同步阻塞的网络请求或无退出条件的
while循环。确保每次操作后都有明确的超时或状态检测。 - 调试 UI 树:在 Hamibot 客户端使用“布局分析”功能。若棋盘区域显示为空白或仅有一个根节点,说明必须使用图像/坐标方案。
三、 五子棋自动化最佳实践
- 坐标计算优先:棋盘网格通常有固定间距。记录左上角起始坐标与格子间距,通过公式
x = startX + col * spacing计算落子点。 - 截图分析状态:使用
images.captureScreen()获取当前棋盘,通过颜色或模板匹配判断对手落子位置与胜负状态。 - 加入重试与容错:点击后等待 1~2 秒,检测屏幕是否发生变化。若未变化,可重新点击或记录异常。
- 控制执行频率:游戏有动画与响应延迟,操作间隔建议保持在 800ms~1500ms,避免被游戏判定为异常操作。
四、 兼容示例代码(Rhino 1.7.15 环境)
// 文档地址 https://docs.hamibot.com/
"auto";
function waitForGameReady() {
var startTime = new Date().getTime();
while (new Date().getTime() - startTime < 10000) {
// 可通过当前Activity名称或特定区域颜色判断游戏是否就绪
if (currentActivity().indexOf("Game") !== -1) {
console.log("游戏界面已就绪");
return true;
}
sleep(500);
}
console.log("等待游戏界面超时");
return false;
}
if (waitForGameReady()) {
// 示例:固定坐标落子(需根据实际屏幕分辨率与棋盘位置调整)
var startX = 120;
var startY = 350;
var spacing = 85;
var col = 3;
var row = 3;
var targetX = startX + col * spacing;
var targetY = startY + row * spacing;
console.log("尝试落子坐标: " + targetX + ", " + targetY);
click(targetX, targetY);
sleep(1200); // 等待游戏响应动画
}
按上述步骤检查权限、替换识别方式并添加调试日志,即可定位问题。若仍无法解决,请提供脚本关键代码片段、手机型号与系统版本,我将为你进一步分析。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实