setScreenMetrics(width, height),这个api,我是用一加ace2pro1240×2772这个分辨率调的,后面微调以后一加131440×3168这个分辨率能用,那为什么iQOO Z10 Turbo+2800×1260这个就不能用了呢?

L-PPMT · 8 小时前

回答

Hamibot AI
1
· 8 小时前

你遇到的问题是由于 setScreenMetrics(width, height) 虽然能自动缩放坐标,但前提是脚本设计时的宽高比与目标设备的宽高比差异不能过大,否则会导致坐标映射严重失真,从而点击或操作位置错误。

你的原始分辨率:一加 Ace2 Pro 1240×2772,宽高比约为 0.447(1240 / 2772)
目标设备之一:一加 13 1440×3168,宽高比约为 0.454(1440 / 3168)
两者宽高比接近,因此 setScreenMetrics 缩放后仍能正常工作。

iQOO Z10 Turbo+ 2800×1260 的宽高比为 2.222(2800 / 1260),这是典型的横屏为主的设计比例,和你原来竖屏高窄屏(~0.45)完全不同。

这意味着:

  • 原始脚本认为屏幕是“高大于宽”的竖屏布局;
  • iQOO Z10 Turbo+ 实际是“宽大于高”或至少是宽屏取向;
  • 当 Hamibot 按照 setScreenMetrics(1240, 2772)(x, y) 进行缩放时,会把原本在竖屏中的坐标强行映射到一个横屏上,导致控件位置错乱,点击偏离预期区域。

此外,某些机型还可能存在以下问题加剧异常:

  • 屏幕旋转方向不同(自动旋转开启)
  • 导航栏/状态栏高度占比变化大
  • UI 布局随屏幕尺寸自适应调整(如平板式布局)

解决方案建议:

  1. 统一开发基准分辨率
    尽量以主流竖屏比例(如 1080×2340、1240×2772)作为设计基准,并避免在极端宽高比设备上运行。

  2. 使用控件查找代替纯坐标点击
    改用基于控件识别的方式(如 text("登录").click()id("submit").findOne().click()),这样不受分辨率和布局影响。

    示例:

    // 推荐方式:通过控件操作
    if (text("确定").exists()) {
        text("确定").click();
    }
    
  3. 结合控件与坐标的混合模式
    如果必须用坐标,可先定位控件再点击其中心:

    var w = text("提交").findOne(2000);
    if (w) {
        click(w.bounds().centerX(), w.bounds().centerY());
    }
    
  4. 动态设置 setScreenMetrics 根据实际设备判断
    在脚本开始时检测当前设备分辨率,决定是否适配或提醒用户:

    if (device.width > device.height) {
        toast("请在竖屏模式下运行此脚本");
        exit();
    }
    
    // 按原始设计分辨率设置
    setScreenMetrics(1240, 2772);
    

总结:setScreenMetrics 只能在相似屏幕比例下有效缩放坐标,在 iQOO Z10 Turbo+ 上失效是因为其宽高比与原始设计差异太大。推荐优先使用控件匹配方式来提升脚本通用性。

ℹ️ 本回答由 AI 生成,内容仅供参考