回答
开发自动点击小游戏日常任务的脚本,你可以按照以下步骤进行。核心在于准确定位界面元素、稳定执行点击动作,并合理处理游戏加载与状态变化。
1. 确保基础权限与环境
- 在手机设置中为 Hamibot 开启「无障碍服务」与「后台弹出界面」权限。权限未授予时,脚本会因无法操作界面而直接退出。
- 脚本开头必须调用
auto.waitFor(),阻塞等待无障碍服务完全就绪后再执行后续逻辑。
2. 核心开发逻辑
- 元素定位:优先使用 UI 选择器(如
text("日常任务")、id("task_btn")、desc("领取"))。坐标点击易受分辨率、刘海屏或游戏更新影响,稳定性较差。 - 点击执行:使用
.click()或Tap(x, y)。Hamibot 的底层点击动作是异步且非阻塞的,脚本不会等待动画或界面刷新完成。因此必须在每次点击后添加sleep()等待响应。 - 循环与状态判断:使用
while或for遍历任务列表,结合exists()判断元素是否出现,避免对已领取或不可点击的元素执行无效操作。 - 异常处理:游戏常出现弹窗、加载动画或网络延迟,需加入超时重试与自动关闭弹窗的逻辑。
3. 示例代码(兼容 Rhino 1.7.15)
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 等待游戏主界面加载完成
while (!text("日常任务").exists()) {
sleep(1000);
}
// 打开任务面板
text("日常任务").findOne().click();
sleep(1500);
// 遍历并点击可领取的任务
var taskList = className("android.widget.Button").find();
for (var i = 0; i < taskList.length; i++) {
var btn = taskList[i];
var btnText = btn.text();
if (btnText && btnText.match(/领取|完成|签到/)) {
btn.click();
sleep(800); // 异步动作必须加延时,等待界面刷新
}
}
// 关闭任务面板
if (text("关闭").exists()) {
text("关闭").findOne().click();
sleep(500);
}
4. 最佳实践建议
- 使用布局分析工具:在 Hamibot 编辑器中打开「布局分析」,实时查看游戏界面的控件树,获取准确的
text、id或className。避免硬编码坐标。 - 合理控制延时:不同机型渲染速度差异较大,
sleep()建议设置在 500~1500ms。若追求效率,可用waitFor()替代固定延时,例如text("领取成功").waitFor(3000)。 - 处理动态弹窗:游戏常弹出“网络错误”、“确认”等提示。可定期检查并自动点击:
if (text("确定").exists()) { text("确定").findOne().click(); sleep(500); } - 防检测与拟人化:避免固定间隔点击。加入随机延时
sleep(500 + Math.random() * 500),模拟人工操作节奏,降低被游戏风控识别的概率。 - Canvas/自定义控件适配:若游戏使用 Canvas 渲染导致 UI 选择器失效,可改用图像识别
images.findImage()定位按钮中心坐标,再配合Tap(x, y)执行点击。注意Tap()同样为异步非阻塞,必须紧跟sleep()。
调试时建议在 Hamibot 编辑器中使用「日志输出」(log()) 打印选择器匹配结果,逐步验证逻辑。若遇到特定控件无法定位或点击无响应,可提供该界面的布局分析属性,我将协助你优化选择器与执行逻辑。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实