跳至主要內容

多點色偏模式找色 (screen.find_color)

聲明

橫座標, 縱座標 = screen.find_color({
[find_all = 是否搜尋多個結果,]
[max_results = 最大結果數,]
[max_miss = 允許最多未命中數,]
{起始點橫座標, 起始點縱座標, {起始點顏色[, 起始點色偏]}},
{偏移點橫座標*, 偏移點縱座標*, {偏移點顏色*, 偏移點色偏*}},
{偏移點橫座標*, 偏移點縱座標*, {偏移點顏色*, 偏移點色偏*}},
...
} [,,,,])

參數

  • 是否搜尋多個結果
    布林型,可選參數,這個標籤設定為 true 會返回範圍內所有匹配位置的一個表,格式為 {{x1, y1}, {x2, y2}, ...},預設 false
  • 最大結果數
    整數型,可選參數,當 find_all (是否搜尋多個結果) 標籤設定為 true 的時候,這個表示最多返回結果數,最多可以設為 1000,預設 100
  • 允許最多未命中數
    整數型,可選參數,可以允許最多的不匹配的點的數量,預設為 0,也就是全命中才算找到
  • 起始點橫座標, 起始點縱座標
    整數型,代表起始座標,它並不是限制找色的範圍為固定這一點,而僅僅是給偏移位置一個相對座標。若不需要使用偏移,可填 0, 0
  • 起始點顏色
    整數型,代表需要搜尋的那一點的顏色
  • 起始點色偏
    整數型,需要搜尋的顏色的最大色偏 (或偏色) ,大於 0xff000000 則為反匹配模式
  • 偏移點橫座標*, 偏移點縱座標*
    整數型,代表一個偏移位置座標
  • 偏移點顏色*
    整數型,代表偏移位置需要匹配的顏色
  • 偏移點色偏*
    整數型,偏移位置的顏色的色偏 (或偏色) ,大於 0xff000000 則為反匹配模式
  • 左, 上, 右, 下
    整數型,可選參數,代表搜尋區域,預設 全屏

回傳值

  • 橫座標, 縱座標
    整數型,返回匹配色的第一個色的座標,搜尋失敗返回 -1, -1

說明

使用色偏(或偏色)模式查找,取得區域中第一個完全匹配的多點顏色結構的位置
目前函式座標值參數及回傳值均受 screen.init 函式初始化的座標系影響
色偏(或偏色) 通常用於表示某個顏色範圍,一個顏色附帶色偏(或偏色)是指該顏色的紅、綠、藍偏移範圍內的所有顏色
當 0x456789 色偏為 0x123456 的時候表示 0x456789 的紅正負範圍 0x12、綠正負範圍 0x34、藍正負範圍 0x56
也就是其紅色範圍為 0x45 ± 0x12、綠色範圍為 0x67 ± 0x34、藍色的範圍為 0x89 ± 0x56,如下表所示

0x45 - 0x12 = 0x330x45 + 0x12 = 0x57
0x67 - 0x34 = 0x330x67 + 0x34 = 0x9B
0x89 - 0x56 = 0x330x89 + 0x56 = 0xDF

上表所述 {0x456789, 0x123456} 即表示從 0x333333 到 0x579BDF 範圍內的所有顏色
使用 0x 開頭的數字為 16 進制數甚麼是 16 進制數?

範例

x, y = screen.find_color({
{ 0, 0, {0xec1c23, 0x000000}},
{ 12, -3, {0xffffff, 0x101010}},
{ 5, -18, {0x00adee, 0x123456}},
{ -1, -10, {0xffc823, 0x101001}},
{ 2, -34, {0xa78217, 0x101001}},
{ 12, -55, {0xd0d2d2, 0x101001}},
}, 0, 0, 100, 100)
--
--[[
在左上為 0, 0 右下為 100, 100 的區域找到第一點與 0xec1c23 完全相似 (色偏為 0)
且它的相對坐標 (12, -3) 的位置的顏色與 0xffffff 的色偏小於 0x101010
且它的相對坐標 (5, -18) 的位置的顏色與 0x00adee 色偏小於 0x123456
且…… (後面的同理) 都能匹配的那個點
--]]
--
-- 等效代碼如下:
--
x, y = screen.find_color({
{ 509, 488, {0xec1c23, 0x000000}},
{ 521, 485, {0xffffff, 0x101010}},
{ 514, 470, {0x00adee, 0x123456}},
{ 508, 478, {0xffc823, 0x101001}},
{ 511, 454, {0xa78217, 0x101001}},
{ 521, 433, {0xd0d2d2, 0x101001}},
}, 0, 0, 100, 100)
--
--[[
在左上為 0, 0 右下為 100, 100 的區域找到第一點與 0xec1c23 完全相似 (色偏為 0)
且它的相對坐標 (521-509, 485-488) 的位置的顏色與 0xffffff 的色偏小於 0x101010
且它的相對坐標 (514-509, 470-488) 的位置的顏色與 0x00adee 色偏小於 0x123456
且…… (後面的同理) 都能匹配的那個點
--]]
--
-- 不換行無縮進就是這個效果:
x, y = screen.find_color({ {0,0,{0xec1c23,0x000000} },{12,-3, {0xffffff,0x101010} },{5,-18, {0x00adee,0x123456} },{-1,-10,{0xffc823,0x101001} },{2,-34,{0xa78217,0x101001} },{12,-55,{0xd0d2d2,0x101001} }, },0,0,100,100)
--
x, y = screen.find_color({ -- 反匹配演示,在 5C 主屏幕運行可獲得結果
{ 516, 288, {0xffffff, 0x101010} },
{ 519, 286, {0xffffff, 0x101010} },
{ 521, 289, {0xffffff, 0x101010} },
{ 516, 296, {0xffffff, 0x101010} },
{ 522, 297, {0xffffff, 0x101010} },
{ 520, 295, {0xffffff, 0xff101010} }, -- 這一點顏色與 0xffffff 色差大於 0x101010 才匹配,下同
{ 515, 291, {0xffffff, 0xff101010} },
{ 518, 284, {0xffffff, 0xff101010} },
{ 523, 298, {0xffffff, 0xff101010} },
{ 514, 298, {0xffffff, 0xff101010} },
{ 514, 296, {0xffffff, 0xff101010} },
}) -- 不寫區域參數表示全屏找
--
results = screen.find_color({ -- 範圍匹配全輸出演示
{ 527, 278, {0xde1d26, 0x101010} },
{ 524, 285, {0x007aff, 0x101010} },
{ 555, 292, {0xe4ddc9, 0x101010} },
{ 536, 314, {0xffde02, 0x101010} },
{ 502, 291, {0xffde02, 0x101010} },
{ 502, 283, {0xe4ddc9, 0x101010} },
find_all = true, -- 帶這個標籤將返回範圍所有匹配的位置的一個表,格式為 { {x1, y1}, {x2, y2}, ...}
}) -- 不寫區域參數表示全屏找