본문 바로가기
이미지맥스 그리고 루아(lua)/[응용] 내장함수 활용

[이미지맥스] 한번에 여러 이미지를 클릭하는 함수 clickImage(...)

by 위치결정 2022. 2. 12.
반응형
-- 이미지 클릭 함수
function clickImage(...)
    local result_table = {}
    for key, value in pairs({...}) do
        local ret, acc, ix, iy, sx, sy = ImageSearch(value)
        if ret == 1 then
            table.insert(result_table, true)
            print('clickImage() : '..value..' [ '..ix, iy, sx, sy..' ]')
            
            -- 랜덤 좌표 생성
            local rx = ix - sx
            local ry = iy - sy
            local rx = math.random(-rx, rx)
            local ry = math.random(-ry, ry)

            -- 클릭 좌표 랜덤값 적용
            local ix = ix + rx
            local iy = iy + ry
            
            -- 마우스 클릭
            Mouse(LBUTTON, CLICK, ix, iy)
        else
            table.insert(result_table, false)
        end
    end
    return table.unpack(result_table)
end

그동안 이미지맥스를 활용하면서 이미지를 클릭하기 위해 여러 형태로 clickImage() 라는 함수를 만들어가면서 사용해왔습니다.

 

이번에는 이전에 만들었던 형태보다 간결하면서도 또한 강력한 기능인 다른 새로운 형태를 소개해드립니다.

함수의 인수 파라미터를 가변인자(...) 로 처리하여 인수로 받아들일수 있는 인자의 갯수가 고정되어있지 않고 지정한 만큼 동작할수 있는 형태입니다.

이로 인해 함수를 정의하고 사용시 여러 이미지를 함수 한줄로 처리 할수 있게 되었습니다.

 

그리고 이미지서치의 결과는 개별 변수로 boolean타입으로 반환 받을수 있습니다.

 

-- 샘플코드1 :: circle 이미지를 서치하여 발견시 클릭
ret = clickImage('circle')
-- > circle 이미지를 클릭 후 ret 변수에 boolean 값으로 true 를 반환

-- 샘플코드2 :: circle, rec 두개의 이미지를 서치 하여 발견시 클릭
ret1, ret2 = clickImage('circle', 'rec')
-- > circle 이미지를 클릭 후 ret1 변수에 boolean 값으로 true 를 반환
-- > rec 이미지를 클릭 후 ret2 변수에 boolean 값으로 true 를 반환

 

보다 스크립트가 심플해질수 있습니다.

반응형

댓글