Что нового

Как правильно выйти из цикла 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,556
Репутация
628
Макрос @error считывает ошибку последней функции. Во втором коде последняя функция это клик мышью. в начале кода объяви переменную
Код:
Local $exit = 1

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

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

vova-n

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