扩展:区域多点找色基础和高阶用法
基础用法
当我们使用“区域模糊找色”函数时,常常会因为屏幕上有大量符合指定颜色的点而找不到需要的坐标。该函数通过在寻找到一个符合指定颜色 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 设置方向旋转,一直保持以当前设置的屏幕方向左上角为初始点。
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 获取的屏幕宽高相反,获取到的宽度实际为屏幕高度,获取的高度实际为屏幕宽度,其他模拟器获取的屏幕宽高为实际屏幕宽高。