Что нового

PixelSearch не возвращает @error, а выдает старый результат.

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Добрый вечер дамы и господа, столкнулся с такой, вот, не понятной проблемой.
Дело в том, что сама по себе функция
Код:
while 1
_analiz ()
wend

Func _analiz ()
Sleep (500)

	PixelSearch ($x1maps, $y1maps, $x2maps, $y2maps, 0x425C00, 10); проблемный PixelSearch

	Select
		Case Not @error
			$analiz [1] = 1

			MsgBox (0, "", "найдена стрелка")
		Case @error
			$analiz [1] = 0
			MsgBox (0, "", "ошибка поиска зеленой стрелки")
	EndSelect

Sleep (2000)

; =========================================================
	PixelSearch ($searchpop [1], $searchpop [2], $searchpop [3], $searchpop [4], 0xFF0000, 30)

	Select
		Case Not @error
			$analiz [2] = 1
		Case @error
			$analiz [2] = 0
	EndSelect

;==================
;==================================

	Select
		Case $analiz [1] = 1
			zabros ()
		Case $analiz [2] = 1
			Sleep (100)
		Case $analiz [1] = 0 And $analiz [2] = 0 ;тянем
			MouseDown ("left")
			tyanem2 ()
	EndSelect

EndFunc

Func zabros () ;заброс
	ToolTip ("ZABROS", 0,0)
	MouseMove ($zabrosX, $zabrosY, 20 )
	MouseDown ("left")
	Sleep (1000)
	MouseUp ("left")
	Sleep (2000)
EndFunc

работает корректно, но в теле основного скрипта, проблемный PixelSearch, при первом "прогоне", находит нужный цвет пикселя, а вот уже при следующем, после заброса, когда гарантированно нет этого пикселя, он все равно его находит!!! Мозговой штурм на конференции не помог, хотя там код не положишь...а в следствии простого замыливания глаза, я допустил ошибку.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
mr.Gbabak [?]
проблемный пиксельсерч
Нет в русском языке такого слова!

при первом "прогоне", находит нужный цвет пикселя, а вот уже при следующем, после заброса, когда гарантированно нет этого пикселя, он все равно его находит!
Откуда такая уверенность?

OffTopic:
У меня уже руки начинают чесаться в сторону создания нового раздела для обсуждения PixelSearch :laugh:
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
CreatoR [?]
Нет в русском языке такого слова!
Прошу прощения, исправил!


Откуда такая уверенность?

При каждом проходе цикла появляется
Код:
MsgBox (0, "", "найдена стрелка")
, в то время когда данного цвета пикселя там нет, потом уже добавил переменную для сохранения координат
Код:
$pos = PixelSearch ($x1maps, $y1maps, $x2maps, $y2maps, 0x425C00, 10); проблемный PixelSearch
MsgBox (0, "", "" &$pos [0]&" "&$pos[1]&"")

выдает одни и те же координаты.
 

running-frag

why me?
Сообщения
441
Репутация
60
Совневаюсь, у тебя выставлен shade
Код:
$pos = PixelSearch ($x1maps, $y1maps, $x2maps, $y2maps, 0x425C00, 10)

Поэтому оно и находит "не то".
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
А если так - что будет выдавать ??? Какие сообщения появляются и правильно ли появляются...
Код:
while 1
   _analiz ()
wend

Func _analiz ()
   Sleep (500)
   $PS1 = PixelSearch ($x1maps, $y1maps, $x2maps, $y2maps, 0x425C00, 10); проблемный PixelSearch
   If @error Then
	  $analiz[1] = 0
	  MsgBox (0, "", "ERROR PS1 !!!")
   Else
	  $analiz[1] = 1
	  MsgBox (0, "", "NOT ERROR PS1 !!!")
   EndIf
   Sleep (2000)
; =========================================================
   $PS2 = PixelSearch ($searchpop [1], $searchpop [2], $searchpop [3], $searchpop [4], 0xFF0000, 30)
   If @error Then
	  $analiz [2] = 0
	  MsgBox (0, "", "ERROR PS2 !!!")
   Else
	  $analiz [2] = 1
	  MsgBox (0, "", "NOT ERROR PS2 !!!")
   EndIf
;==================================

    Select
        Case $analiz [1] = 1
            zabros ()
        Case $analiz [2] = 1
            Sleep (100)
        Case $analiz [1] = 0 And $analiz [2] = 0 ;тянем
            MouseDown ("left")
            tyanem2 ()
    EndSelect

EndFunc

Func zabros () ;заброс
    ToolTip ("ZABROS", 0,0)
    MouseMove ($zabrosX, $zabrosY, 20 )
    MouseDown ("left")
    Sleep (1000)
    MouseUp ("left")
    Sleep (2000)
EndFunc
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Уважаемый ---Zak---
NOT ERROR PS1 !!! следом ERROR PS2!!!!
Причем проблема осталась!=(

Попробовал вместо переменных в PikselSearch вставить конкретные значения (которые записаны в переменных), то все работает адекватно.
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Попробуй так
Код:
while 1
_analiz ()
wend

Func _analiz ()
Sleep (500)

    Local $Pix = PixelSearch ($x1maps, $y1maps, $x2maps, $y2maps, 0x425C00, 10); проблемный PixelSearch

    Select
        Case IsArray($Pix)
            $analiz [1] = 1

            MsgBox (0, "", "найдена стрелка")
        Case Not IsArray($Pix)
            $analiz [1] = 0
            MsgBox (0, "", "ошибка поиска зеленой стрелки")
    EndSelect

Sleep (2000)

; =========================================================
    $Pix = PixelSearch ($searchpop [1], $searchpop [2], $searchpop [3], $searchpop [4], 0xFF0000, 30)

    Select
        Case IsArray($Pix)
            $analiz [2] = 1
        Case Not IsArray($Pix)
            $analiz [2] = 0
    EndSelect

;==================
;==================================

    Select
        Case $analiz [1] = 1
            zabros ()
        Case $analiz [2] = 1
            Sleep (100)
        Case $analiz [1] = 0 And $analiz [2] = 0 ;тянем
            MouseDown ("left")
            tyanem2 ()
    EndSelect

EndFunc

Func zabros () ;заброс
    ToolTip ("ZABROS", 0,0)
    MouseMove ($zabrosX, $zabrosY, 20 )
    MouseDown ("left")
    Sleep (1000)
    MouseUp ("left")
    Sleep (2000)
EndFunc
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
rusreg79
Интересный метод...надо будет взять на вооружение!

Как я и думал, все оказалось прозаичней, хотя....в общем координаты в переменных
Код:
$x1maps, $x2maps, $y1maps, $y2maps
, рассчитывались по формуле, в итоге были перепутаны местами $y1maps и $y2maps, как исправил-все заработало.
НО по идее, ведь, если переставить местами координаты по оси Y, то поиск идет не сверху вниз, а снизу в верх?!! И если данное утверждение верно, а оно как мне кажется верно, в первом же "прогоне" пиксель нужного цвета находился, а почему в последующие разы, пиксель находился на одном и том же месте, когда его там фактически не было?


Если я где-то заблуждаюсь, поправьте меня пожалуйста!
 

running-frag

why me?
Сообщения
441
Репутация
60
mr.Gbabak [?]
НО по идее, ведь, если переставить местами координаты по оси Y, то поиск идет не сверху вниз, а снизу в верх?!!
Не надо "по идее". Читай что написано.
Код:
PixelSearch () ; кликни на функцию


И если данное утверждение верно, а оно как мне кажется верно, в первом же "прогоне" пиксель нужного цвета находился, а почему в последующие разы, пиксель находился на одном и том же месте, когда его там фактически не было?
Почитай о shade-variation. Это первый момент. Второй то что "пока мышка наведётся" цвет может быть изменён (пикселя). Третий координаты поиска, так же опции Opt () - относительность координат.

PS: Если PixelSearch () работает не корректно - значит что программа написана не правильно и проблема не в в функции а в алгоритме вашего кода.



Добавлено:
Сообщение автоматически объединено:

я бы искал та
Код:
While True
	make ()
WEnd

Func find ($x1, $y1, $x2, $y2, $color, $shade)
	#cs
		array[0] = True\False
		array[1] = x
		array[2] = y
	#ce
	Local $return[3] = [False, 0, 0]
	Local $coord = PixelSearch ($x1, $y1, $x2, $y2, $color, $shade)
	If @error Then Return $return	; если ненашло отдаём default значение
	
	$return[0] = True				; если нашло перезаписуем
	$return[1] = $coord[0]
	$return[2] = $coord[1]
	
	Return $return
EndFunc

Func make ()
	Local $fir = find ($x1maps, $y1maps, $x2maps, $y2maps, 0x425C00, 10) ; первый поиск
	Local $sec = find ($searchpop[1], $searchpop[2], $searchpop[3], $searchpop[4], 0xFF0000, 30) ; второй поиск
	#cs
		$fir[0] = True\False
		$fir[1] = x
		$fir[2] = y
	#ce
	Select
		Case $fir[0]
			; ... первый поиск пикселя True
			; zabros ()
		Case $sec[0]
			; ... второй поиск пикселя True		
			; Sleep (100)
		Case Not $fir[0] And Not $sec[0]
			; ... первый и второй пикселя False
			; MouseDown ("left")
			; tyanem2 ()
		Case Else
			; ... всё остальное
			; somefunc () 
		EndSelect
		
EndFunc
 
Автор
M

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
running-frag
Угу, понял, спасибо!!
Господа модераторы, кажется, темка не достойна внимания, в ней нет существенных примеров и решений, поэтому ее можно удалить!
 
Верх