回答
在Hamibot中实现传奇类手游的自动打怪,核心思路是图像/颜色识别 + 坐标点击 + 循环控制。由于手游通常不暴露无障碍控件树,无法使用 text() 或 className() 选择器,需依赖 images 模块进行屏幕特征匹配。
以下为可直接运行的基础脚本框架(已适配 Rhino 1.7.15 引擎,无箭头函数与默认参数):
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
auto.setMode('fast');
// 需根据实际游戏画面替换目标颜色或模板图片路径
var targetColor = "#FF0000";
var threshold = 0.9;
function findAndClick() {
var img = captureScreen();
if (!img) {
log("截图失败");
return false;
}
var point = images.findColor(img, targetColor, { threshold: threshold });
if (point) {
click(point.x, point.y);
log("点击坐标: " + point.x + ", " + point.y);
return true;
}
return false;
}
// 主循环
while (true) {
try {
if (!findAndClick()) {
// 未识别到目标时等待,避免空转耗电
sleep(1000);
} else {
// 点击后加入随机延迟,模拟人工操作并等待技能冷却
sleep(500 + Math.floor(Math.random() * 500));
}
} catch (e) {
log("执行异常: " + e);
sleep(2000);
}
}
关键技术点与最佳实践
-
识别方式选择
- 颜色匹配:适合血条、固定UI按钮。使用
images.findColor()时需通过Hamibot控制台的“取色器”获取准确色值,并适当调低threshold(如0.85)以兼容光影变化。 - 模板匹配:更稳定。提前截取游戏内“攻击按钮”或“怪物图标”保存为PNG,使用
images.findImage(captureScreen(), images.read("/sdcard/attack_btn.png"))进行匹配。
- 颜色匹配:适合血条、固定UI按钮。使用
-
分辨率适配
不同设备坐标不同。建议记录基准分辨率(如1080x1920),运行时通过device.width和device.height计算缩放比例,将固定坐标转换为相对坐标:var scaleX = device.width / 1080; var scaleY = device.height / 1920; click(500 * scaleX, 800 * scaleY); -
稳定性与防检测
- 避免固定间隔点击,使用
Math.random()生成800~1500ms的随机延迟。 - 定期检测游戏是否弹出“网络断开”、“体力不足”等提示框,可加入
images.findImage()匹配提示框并执行关闭逻辑。 - 脚本开头添加
events.on('exit', function() { log("脚本已退出"); });便于控制台监控状态。
- 避免固定间隔点击,使用
-
权限与运行环境
- 首次运行需授予Hamibot“屏幕录制/截图”权限与“无障碍服务”权限。
- 无需Root即可运行。上下文提及的
RootAutomator已弃用,官方推荐优先使用无障碍服务配合坐标点击方案。
调试建议
- 在Hamibot控制台使用“实时日志”查看识别结果与坐标。
- 使用“截图调试”功能截取当前游戏画面,验证颜色或模板是否能被准确识别。
- 若游戏频繁更新导致识别失效,需重新采集目标特征并更新脚本参数。
提供具体游戏名称、需要识别的按钮/怪物截图或当前卡住的环节,可进一步为你优化识别逻辑与循环策略。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实