여러 지점 색상 편차 방식으로 색상 찾기 (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 = 0x33 | 0x45 + 0x12 = 0x57 |
| 0x67 - 0x34 = 0x33 | 0x67 + 0x34 = 0x9B |
| 0x89 - 0x56 = 0x33 | 0x89 + 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}, ...} 형식의 테이블로 반환합니다.
}) -- 영역 매개변수를 생략하면 전체 화면에서 찾습니다.