Что нового

поиск группы точек через PixelSearch()

MadMNN

Новичок
Сообщения
27
Репутация
0
есть диапазон точек где нужно найти определенный элемент


Код:
PixelSearch(0, 0, 100, 100 , 0xADCF94)
If Not @error Then
EnterUro($coord)
EndIf

Func EnterUro($coord_) ;тут ищем сетку правилных точек
	$coord0 = PixelSearch($coord_[0], $coord_[1], $coord_[0], $coord_[1] , 0xADCF94)
If Not @error Then

	
   $coord1 = PixelSearch($coord0[0], $coord0[1]+4 , $coord0[0], $coord0[1]+4 , 0xC6EFF7)

   If Not @error Then
	
	   $coord2 = PixelSearch($coord1[0]+10, $coord1[1] , $coord1[0]+10, $coord1[1] , 0x10454A)
	   If Not @error Then
		
		   $coord3 = PixelSearch($coord2[0], $coord2[1]+4 , $coord2[0], $coord2[1]+4 , 0x392829)
		   If Not @error Then
		
			   $coord4 = PixelSearch($coord3[0]-4, $coord3[1] , $coord3[0]-4, $coord3[1] , 0x5ACBCE)
			   If Not @error Then
				Beep(500, 10) ; пищим и смеемся что нашли
				EndIf
			EndIf
		EndIf
	EndIf



EndIf

EndFunc


все хорошо и отлично пока начальная точка одна

но когда их много то приходится проходить циклом по всему диапазону точек
Код:
For $j=0 To 100
		For $i= 0 to 100
			$coord = PixelSearch($i, $j , $i, $j , 0xADCF94)
				If Not @error Then
					EnterUro($coord) ; та же процедура из верхнего примера
				EndIf
		Next

Next


и тут начинаются великие томозаааааааа. тоже конечно находит но слишком долго

помогите оптимизировать поиск
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
У меня этот скрипт прокрутился за 400ms. а когда я включил аеро оформление то работал он 185сек ;D

Код:
$st = TimerInit()

For $j = 0 To 100
	For $i = 0 To 100
		$coord = PixelSearch($i, $j, $i, $j, 0xADCF94)
		If Not @error Then
			EnterUro($coord) ; та же процедура из верхнего примера
		EndIf
	Next
Next

Func EnterUro($coord_) ;тут ищем сетку правилных точек
	$coord0 = PixelSearch($coord_[0], $coord_[1], $coord_[0], $coord_[1], 0xADCF94)
	If Not @error Then
		$coord1 = PixelSearch($coord0[0], $coord0[1] + 4, $coord0[0], $coord0[1] + 4, 0xC6EFF7)
		If Not @error Then
			$coord2 = PixelSearch($coord1[0] + 10, $coord1[1], $coord1[0] + 10, $coord1[1], 0x10454A)
			If Not @error Then

				$coord3 = PixelSearch($coord2[0], $coord2[1] + 4, $coord2[0], $coord2[1] + 4, 0x392829)
				If Not @error Then

					$coord4 = PixelSearch($coord3[0] - 4, $coord3[1], $coord3[0] - 4, $coord3[1], 0x5ACBCE)
					If Not @error Then
						Beep(500, 10) ; пищим и смеемся что нашли
					EndIf
				EndIf
			EndIf
		EndIf
	EndIf
EndFunc   ;==>EnterUro

ConsoleWrite('time: ' & TimerDiff($st) & @CRLF)
 
Автор
M

MadMNN

Новичок
Сообщения
27
Репутация
0
в принципе проблема решена переработкой PixelSearchEx() под свои нужды
 
Верх