Persistencia em Imagem Topic is solved

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

Moderator: Gio

User avatar
Hologram
Posts: 129
Joined: 06 May 2020, 16:47

Persistencia em Imagem

30 May 2020, 05:45

A intenção final desse script é procurar e clicar em uma imagem e dar prioridade a ela até sumir da tela, (em vista que existem várias outras dessa mesma imagem que usam a mesma sprite, ou seja.. acabam deixando o mouse maluco, pois ele vai localizar ela em várias partes da tela e fica clicando randomicamente..)

Exemplo:
persist.png
persist.png (25.57 KiB) Viewed 388 times
O alvo seria o "Circulo" porém existem vários.. a partir do ponto que o imagemsearch encontrasse o primeiro e clicasse sobre ele, gostaria que ficasse focado até ele desaparecer por completo..

Base:

Code: Select all

	ImageSearch, PosX, PosY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, %A_ScriptDir%/circulo.png
	If (ErrorLevel = 0) ; E em qualquer situação onde a imagem for encontrada, o valor da variável é trocado para 1.
	{
	
		teste := 1
		X_Um_Pouco_Mais_A_Esquerda := PosX + 0 ; Como o comando retorna a posição superior-esquerda da imagem, vamos clicar um pouco mais à esquerda (pois alguns botões tem bordas que não são clicáveis)
		Y_Um_Pouco_Mais_Abaixo := PosY + 0 ; Como o comanod retorna a posição superior-esquerda da imagem, vamos clicar um pouco mais abaixo (novamente: isto é para evitar bordas!)
		MouseMove, %X_Um_Pouco_Mais_A_Esquerda%, %Y_Um_Pouco_Mais_Abaixo% ; Movemos o mouse para a posição calculada.
		Mouseclick
		Send, {Enter}
	}

User avatar
Gio
Posts: 1068
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Persistencia em Imagem  Topic is solved

30 May 2020, 09:50

Bom dia Hologram.

O comando ImageSearch efetua a busca da imagem do mesmo modo sempre (por exemplo: sempre que X1 > X2 e no modo normal, será de cima para baixo na coluna e depois da esquerda para a direita pula uma coluna, repetindo nesta exata ordem até o final da área de busca). Isso significa que se a área de busca for a mesma e a posição dos objetos também for a mesma, ele sempre encontrará o mesmo objeto.

Mas como você está relatando uma situação diferente, talvez algumas coisas podem estar de fato interferindo nisso:

1. Se você fizer aparecer um ToolTip em cima da imagem encontrada, ou se o mouse for desenhado pelo programa alvo de uma forma específica em que ele apareça para o ImageSearch (normalmente o mouse não aparece pro comando), pode de fato acontecer de o comando não achar mais uma correspondência naquela imagem, pulando para a próxima, pois um objeto em cima da imagem impede uma correspondência exata com a imagem inteira. Solução: Neste caso seria não desenhar o tooltip em cima do objeto e/ou mover o mouse pra longe da imagem um pouco antes de efetuar a busca.

2. Outra possibilidade é que você esteja em um jogo onde as imagens mudem de lugar constantemente na tela. Se dois bonecos se movem constantemente de lugar pode acontecer de um boneco que antes não estava primeiro na ordem de busca agora esteja. Solução: Neste caso acredito que seria um pouco mais difícil de dizer sem ver o modo como as imagens se movem, mas creio que alterando a área de busca após a primeira correspondência para buscar somente próximo a ela (diminuindo a área e centralizando no local encontrado) você pode fazer sucessivos imagesearch irem "seguindo" o objeto-alvo. O tamanho e as posições das áreas de busca subsequentes dependeriam da velocidade de movimento do objeto e da velocidade de execução do ImageSearch, então, teria que ser um ajuste fino caso-a-caso.

3. Uma terceira possibilidade ainda é que você esteja fazendo um loop com várias possibilidades de sprite de um boneco e hajam vários bonecos na tela. Como os bonecos trocam constantemente de sprite, a rotina pode acabar pulando de um boneco para outro dependendo de qual sprite ela está procurando naquele momento e qual boneco está mostrando a sprite naquele momento. Neste momento você pode fazer algo parecido com a solução do caso acima: uma vez encontrado o boneco, diminuir a área de busca centralizando nele e passando por todos os sprites somente lá (recalculando a centralização sempre conforme o objeto é encontrado em outras posições).


:arrow: Testei a imagem que você postou e o ImageSearch sempre encontrou o mesmo círculo. Se de fato ele está mudando o círculo no seu teste, mesmo com a imagem parada, talvez o caso 1 esteja ocorrendo com você. Tente mexer o mouse logo antes de efetuar a próxima busca e veja se isso faz com que o mesmo círculo seja encontrado.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 4 guests