Как отследить движение цвета

Помощь в написании скриптов
woxaz
Posts: 13
Joined: 05 Apr 2021, 01:56

Как отследить движение цвета

Post by woxaz » 05 Apr 2021, 02:10

Всем привет недавно начал изучать AHK и столкнулся с проблемой нужно https prnt.sc /114kusa https youtu.be /EchCvHdeliQ Broken Link for safety вот пример как выглядит полоска
как с помощью AHK отследить ее изменение именно когда она начала двигаться выполнить 1 действие когда не двигается то другое действие

помогите не могу понять логику
Last edited by woxaz on 05 Apr 2021, 02:36, edited 3 times in total.

woxaz
Posts: 13
Joined: 05 Apr 2021, 01:56

Re: Как отследить движение цвета

Post by woxaz » 05 Apr 2021, 02:12

Attachments
вопрос.png
вопрос.png (7.12 KiB) Viewed 2097 times

mcl
Posts: 356
Joined: 04 May 2018, 16:35

Re: Как отследить движение цвета

Post by mcl » 05 Apr 2021, 05:52

Полоска по горизонтали довольно равномерна − это плюс. Слева синие цвета, справа − тёмно-коричневые.
Можно искать в однопиксельной полоске с помощью PixelSearch тёмно-коричневый цвет − так как поиск идёт слева направо, координаты первого найденного пикселя и будут текущим значением. Остаётся в цикле проверять, не изменилось ли оно с прошлого такта.

Code: Select all

barX := 100  ; Координаты левого верхнего угла полоски
barY := 100  ; 
barWidth := 230  ; Длина полоски в пикселях
lookupColor := 0x0D102B  ; Искомый цвет (я взял самый тёмный)
lastValue := 100
Loop {
	PixelSearch, px, py, %barX%, %barY%, % barX+barWidth, % barY+1, %lookupColor%, 20
	If (py == "")
		Break
	
	If (py != lastValue) {  ; Полоска сдвинулась
		; Делаем дела
		lastValue := py
	}
	
	Sleep 150
}
Если шаг изменения не слишком велик, можно повысить производительность, сканируя только небольшую область вокруг последнего значения.
github://oGDIp - GDI+ wrapper for AHK v1.1

woxaz
Posts: 13
Joined: 05 Apr 2021, 01:56

Re: Как отследить движение цвета

Post by woxaz » 05 Apr 2021, 23:07

Что-то не работает вопрос по коду почему
If (py == "") ? py -- я так понимаю проверка по У и она проверяет на пустоту если нет координат то выходит вроде понятно
Break

полоска двигаться по Х

If (py != lastValue) { ; Полоска сдвинулась тут опять же проверка идет по -У- что такое lastValue ( 100 ) немного не понятно причем тут 100 начальная координата
проблема в том что полоска постоянно сдвигаться вправо и есть выбор или нажать F2 когда она не двигается
тогда она уменьшиться или нажать F3 когда полоса в движении тогда она тоже уменьшиться суть сдвинуть ее влево


Идея хорошая нужна помощь как сделать проверку цвета в координатах например 373, 522, 600, 522, 0x0F122D
и сохранить найденную координату -Х- в переменную и потом выполнить проверку на изменение этой переменой если
она равна то Нажимать {F2} Пока оно равно. Как только стала не равна Нажать {F3} и так повторять пока он видит цвет
в 373, 522, 600, 522, 0x0F122D как только цвет пропал ждать пока он не появиться и когда появился повторить то что выше
и так до безконечности

woxaz
Posts: 13
Joined: 05 Apr 2021, 01:56

Re: Как отследить движение цвета

Post by woxaz » 06 Apr 2021, 03:11

Code: Select all

F9::



Loop {
run:
lastValue := 373
PixelSearch, Px, Py, 373, 522, 600, 524, 0x0F122D, 3, Fast

if ErrorLevel
    goto, run
else
    
	If (Px != lastValue) {  ; Полоска сдвинулась
		; Делаем дела
		Tooltip %Px%
		SendInput, {F3}
		;Px := Pxp
		lastValue := Px
		
	}
	 
	If (Px == lastValue) {  ; Полоска не сдвинулась
		; Делаем дела
		Tooltip %Px%
		SendInput, {F2}
		lastValue := Px
		
	}
		
}
return


F12::Reload
Pause::Pause


Как довести до ума этот код он жмет обе кнопки, одновременно, а должен проверить на совпадение с первой найденной координатой по Х и если не изменилось нажать 1 кнопку а если изменилось то 2 и так постоянно проверять пока не пропадет полоска

mcl
Posts: 356
Joined: 04 May 2018, 16:35

Re: Как отследить движение цвета

Post by mcl » 06 Apr 2021, 04:11

Code: Select all

	If (Px != lastValue) {  ; Полоска сдвинулась
		...
		lastValue := Px
		
	} Else {  ; Полоска не сдвинулась
		...
		lastValue := Px  ; ←← Это не нужно, мы уже убедились, что они идентичны.
	}
}
Без Else в lastValue записывается значение Px и тут же снова проверяется на равенство − разумеется, вторая ветка If тоже выполняется.
Инициализация lastValue должна быть вне Loop-цикла, иначе на каждом повторе она будет сбрасываться, и весь её смысл теряется.
github://oGDIp - GDI+ wrapper for AHK v1.1

woxaz
Posts: 13
Joined: 05 Apr 2021, 01:56

Re: Как отследить движение цвета

Post by woxaz » 06 Apr 2021, 06:23

Code: Select all

F9::
lastValue := 373
Loop {
run:
PixelSearch, Px, Py, 373, 523, 600, 523, 0x131A37, 3, Fast
if ErrorLevel
    goto, run

    If (Px != lastValue) {  ; Полоска сдвинулась
	Tooltip %Px%
	SendInput, {F3}
	Sleep 3
	lastValue := Px	
	
	}
	Else {  ; Полоска не сдвинулась
	Tooltip %Px%
	SendInput, {F2}
	Sleep 5
	}
} 
return
F12::Reload
Pause::Pause

чего-то не хватает нажимает 2 кнопки хотя должен жать согласно условию

mcl
Posts: 356
Joined: 04 May 2018, 16:35

Re: Как отследить движение цвета

Post by mcl » 06 Apr 2021, 15:42

Полоска сдвинулась → Нажимаем F3 → Ждём 3 миллисекунды → Полоска не сдвинулась → Продолжаем жать F2.
github://oGDIp - GDI+ wrapper for AHK v1.1

ELaI
Posts: 1
Joined: 06 Jan 2022, 23:19

Re: Как отследить движение цвета

Post by ELaI » 06 Jan 2022, 23:27

Удалось решить вопрос, колдовал колдовал, не получилось. Может кто поделиться рабочим вариантом. проблема в том что цвет полоски не однородный и очень часто полоска стоит а определяется как сдвиг.

Post Reply

Return to “Помощь”