扩展:区域多点找色基础和高阶用法

基础用法

当我们使用“区域模糊找色”函数时,常常会因为屏幕上有大量符合指定颜色的点而找不到需要的坐标。该函数通过在寻找到一个符合指定颜色 color 的坐标后,进一步确认其周边点坐标的方式,来确定准确目标。例如,现在我们在图像上找到了我们需要的一个按钮,这个按钮的图案是不变的,但是它的整体位置却会在整个屏幕上变化,现在我们想要在脚本运行时得到其坐标。

我们首先找到基准点:

这个点的颜色为 0x181F85,坐标为 268, 802

记录下来,接着找这个按钮上的参照点:

这个点的颜色为 0x00BBFE,坐标为 297, 803,相对于基准点的坐标为 29, 1。 记录下来,接着找这个按钮上的第三个点和第四个点。

第二个参照点的颜色为 0x0B6BBE,坐标为 371, 798,相对于基准点的坐标为 103, -4

第三个参照点的颜色为 0x150972,坐标为 333, 811,相对于基准点的坐标为 65, 9

现在我们找到了需要的目标点:

序号 颜色 坐标 相对坐标
1 0x181F85 (268, 802) (0, 0)
2 0x00BBFE (297, 803) (29, 1)
3 0x0B6BBE (371, 798) (103, -4)
4 0x150972 (333, 811) (65, 9)

现在我们可以把它写成多点找色的格式了:

--多点找色
--在屏幕上以左上角坐标 (0,0) 和右下角坐标 (639, 959)确定的区域(即全屏)范围内寻找符合偏移范围和颜色的 3 个坐标点
x, y = findMultiColorInRegionFuzzy(0x181F85, "29|1|0x00BBFE,103|-4| 0x0B6BBE,65|9|0x150972", 100, 0, 0, 639, 959); 
dialog(x..","..y, 0)

那么返回的 x, y 就应该是基准点坐标 268,802了。即使这个按钮平移了,这个点的坐标变了,也可以寻找到其准确位置。

高阶用法

多方向找色规则

orient 不填或 orient = 0 表示包括基准点在内的所有目标点都必须在查找范围之内 ,orient = 1 - 8 表示使用 8 种不同的找色方向。

只要写了 orient 参数,那么找色方向就会根据 init 设置方向旋转,一直保持以当前设置的屏幕方向左上角为初始点。

init.png-90.8kB

orient = 1,左上角到右下角,纵向开始找色,先找到 a 顶点。

orient = 2,左上角到右下角,横向开始找色,先找到 b 顶点。

orient = 3,右上角到左下角,横向开始找色,先找到 c 顶点。

以此类推。

多点找色示例图示例代码所用图片、演示代码如下

 local w,h = getScreenSize()
    fwShowWnd("wid1", 0, 0, w-1, h-1,1)
    fwShowImageView("wid1","picid","image.png",0, 0, w-1, h-1)
    mSleep(500)
    for i = 0, 2 do
        init(i)
        if i == 0 then
            toast("init方向为0",3)
            x1,y1,x2,y2 = 0,0,w-1,h-1
        elseif i == 1 then
            toast("init方向为1",3)
            x1,y1,x2,y2 = 0,0,h-1,w-1
        else
            toast("init方向为2",3)
            x1,y1,x2,y2 = 0,0,h-1,w-1
        end
        for var = 1, 8 do
            x,y = findMultiColorInRegionFuzzy( 0x000000, "0|0|0x000000", 95, x1, y1, x2, y2,  { orient = var })
            fwShowWnd("wid", x-20, y-20, x+20, y+20,1)
            fwShowTextView("wid","textid","","center","FF0000","FFDAB9",20,0,0,0,40,40,1)
            mSleep(500)
        end
    end

注意事项

  • 引擎版本 iOS v2.4.5-9、v3.0.0-118及 Android v3.2.1 以上版本,如果 orient = 1 - 8 按方向进行查找,只要基准点在查找范围内,不需要参照点在查找范围之内。

  • 引擎版本 Android v2.3.5 以上版本,如果 orient = 1 - 8 按方向进行查找, Android v2.3.5.4 以上版本支持 orient = 0。

  • 雷电 9 系统模拟器分辨率为平板版时使用函数:getScreenSize 获取的屏幕宽高相反,获取到的宽度实际为屏幕高度,获取的高度实际为屏幕宽度,其他模拟器获取的屏幕宽高为实际屏幕宽高。

Copyright 北京帮你玩科技有限公司 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-03-06 17:50:18

results matching ""

    No results matching ""