Salvar Posição ImageSearch Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

Qhimin
Posts: 16
Joined: 30 Nov 2020, 19:24

Salvar Posição ImageSearch

Post by Qhimin » 08 Dec 2020, 20:10

Fala galera, tudo certo?

O código no momento, que funciona, está assim:

Code: Select all

Loop {
    ImageSearch, refX, refY, 0, 0, A_ScreenWidth, A_ScreenHeight, *40 ./imgRef.png
    if (ErrorLevel == 0) {
        ImageSearch, WX, WY, refX-70, refY+40, refX-30, refY+80, *40 ./img.png
        if (ErrorLevel == 0)
            MsgBox it works
    }
}
Para buscar a posição de uma imagem (img.png) que é uma imagem que muda, estou usando uma imagem de referência fixa (imgRef.png) para encontrar aonde a imagem de meu interesse está localizada. Como a posição não vai sofrer nenhuma alteração, não há necessidade de ficar rodando o ImageSearch para encontrar as posições refX e refY toda vez. Gostaria de saber uma forma de salvar as coordenadas em uma variável e assim diminuir o uso de um ImageSearch na tela toda. Tentei criar uma função para isso, porém, o ImageSearch sempre retorna ErrorLevel 2 dentro de qualquer função.

Code: Select all

FindImgPos(X1, Y1, X2, Y2, imagePathAndName) {
    ImageSearch, FX, FY, %X1%, %Y1%, %X2%, %Y2%, *40 %imagePathAndName%
    if (ErrorLevel = 0) {
        Return {x1: FX-70, y1: FY+40, x2: FX-30, y2: FY+80}
}
Espero ter sido claro no problema, que seria mais pra otimização do script.
Pensei em criar um arquivo .ini ao abrir o script e toda vez buscar nele, mas não sei se é a maneira mais inteligente/eficaz. Estou aberto a sugestões.

Muito obrigado!
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Salvar Posição ImageSearch  Topic is solved

Post by Gio » 14 Dec 2020, 10:30

Bom dia Qhimin.

Você pode usar If/Else para isso.

Exemplo:

Code: Select all

Loop {
	If ((refX = "") OR (refY = "")) {
		ImageSearch, refX, refY, 0, 0, A_ScreenWidth, A_ScreenHeight, *40 ./imgRef.png
	}
	else {
		ImageSearch, WX, WY, refX-70, refY+40, refX-30, refY+80, *40 ./img.png
		if (ErrorLevel == 0) {
				MsgBox it works
		}
	}
}
:arrow: A lógica é que na primeira vez que o loop rodar, as variáveis refX e refY estarão em branco, então o primeiro ImageSearch rodará e buscará imgRef.png. DEPOIS, a partir da segunda execução em diante (e desde que o primeiro ImageSearch tenha encontrado a imagem, pois somente então é que refX e refY serão diferentes de nada) o loop fará a execução cair sempre no ELSE (que contém apenas o segundo ImageSearch).
Post Reply

Return to “Ajuda e Suporte Geral”