Что нового

Как правильно выйти из цикла Do Until?

vova-n

Новичок
Сообщения
23
Репутация
0
Есть у меня такой вот кусок кода который прекрасно работает. Но возможно не правильный сам по себе. Как я его понимаю - PixelSearch запускает бесконечное число раз пока не будет найден искомый цвет пикселя в указанном прямоугольнике экрана. Переменная $i - подсчитывает сколько раз запускался PixelSearch. Использовал чтобы получше подобрать параметр оттенка цвета. Хотя наверно правильнее было бы засекать время поиска. Но на глаз и так сойдёт.
Код:
$i = 0
Do
	Local $aCoord = PixelSearch(365, 1115, 2420, 1160, 16298240, 20, 1)
	$i=$i+1
Until @error = 0
MsgBox(0,0,$i)


А вот такой же кусок кода но немного изменённый уже не хочет работать как надо. Цикл Do прерывается. Пиксель не находит. Хотя в коде выше $i не видел больше 27.
Код:
$t = 0
	$i = 0
	Do 
		Local $aCoord = PixelSearch(365, 1115, 2420, 1160, 16298240, 20, 1)
		$i = $i + 1
		If $i >= 100 Then
			MouseMove(100, 655 + $t, 5)
			MouseClick("left", 100, 655 + $t, 1, 1)
			$t = $t + 79
			$i = 0
			ContinueLoop
		EndIf
	Until @error = 0

По идее если $i достигла 100, то должны произойти события указанные в IF. Они происходят единожды. И потом скрипт прерывается.
Спотыкается на следующих строчках кода, после приведённого цикла:
Код:
MouseMove($aCoord[0], $aCoord[1], 5)
	MouseClick("left", $aCoord[0], $aCoord[1], 1, 1)

Выдаёт $aCoord ERROR. Что логично - массив не создался так как пиксель не нашёлся.

Подозреваю что я совершенно не правильно выхожу из цикла. Но этот @error это единственное что мне было понятно из справки. Пробовал уже менять это условие. Мол если первый элемент массива ничему не равен то такие-то действия. Но тут снова та же ошибка $aCoord ERROR. Возможно нужен другой цикл. То что в условие IF необходимо выполнить не больше 5 раз. Пробовал через for next делать. Не работает как надо.

Два дня уже убил на этот момент. Весь мозг сломал. Помогайте гуру AutoIt)))
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
Макрос @error считывает ошибку последней функции. Во втором коде последняя функция это клик мышью. в начале кода объяви переменную
Код:
Local $exit = 1

Под функцией поиска пикселя напиши
Код:
If Not @error Then $exit = 0

Конец цикла будет таким
Код:
Until $exit = 0
 
Автор
V

vova-n

Новичок
Сообщения
23
Репутация
0
Спасибо! Именно то чего мне не хватало. Много раз видел что @error берут в переменную. Но думал что это лишнее. Теперь понял что нет.
 
Верх