1 (изменено: baplo, 2017-12-29 15:49:52)

Тема: AHK: Сканирование нескольких фрагментов на экране и условие

Снова всем привет!

Столкнулся с таким вопросом..

Есть у меня значит 5 фрагментов на экране, но каждый фрагмент может замениться на другой из этих 5.

Например:
На экране может появиться фрагмент 1.bmp, либо же 2.bmp или 3.bmp и т.д

Вообщем, есть код:

1:   ; флаг перехода
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 1.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 2.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 3.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 4.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 5.bmp
if x1 > 0 ; проверяем, нашло ли что нибудь.
{
условие ; если что то нашли, то уходим из цикла проверки изображения
}
else
{
goto 1 ; если не найден ни один из фрагментов, назад к флагу 1
}

Главный косяк в этом коде, это то, что переменные будут сбрасываться, если изображение не будет найдено и на выходе, в частых случаях, мы будем получать условие x1 = 0, что конечно же не больше 0.

Как исправить такую проблему, может можно как то заблокировать обновление переменной в сторону уменьшения?
Например, если в первом поиске, изображение нашлось: Переменная X1 будет = 700, а если последнее изображение не найдет ничего, то переменная не будет сброшена на 0.
Не хочется писать большой код, хочется уместить всё в небольших строчках, есть варианты, господа?

2

Re: AHK: Сканирование нескольких фрагментов на экране и условие

Если вопрос только в том, чтобы обновлять икс координату только при нахождении фрагмента, то, можно добавить временное хранилище значения икс и выполнять проверку и изменение только его значения. Например:


x := tmpX := 0
1:   ; флаг перехода
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 1.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 2.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 3.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 4.bmp
ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 5.bmp
x := x1 ? x1 : x
if x != tmpX ; проверяем, нашло ли что нибудь.
{
tmpX := x
условие ; если что то нашли, то уходим из цикла проверки изображения
}
else
{
goto 1 ; если не найден ни один из фрагментов, назад к флагу 1
}

3

Re: AHK: Сканирование нескольких фрагментов на экране и условие

KusochekDobra пишет:

if x != tmpX ; проверяем, нашло ли что нибудь.

x := tmpX := 10
if x != tmpX
   msgbox

Я бы так сделал:

loop 
{
   n++
   if n > 5
      n := 1
   ImageSearch, x1, x2, 0, 0, 2000, 2000, *0 %n%.bmp
   If !ErrorLevel
      break
}

4

Re: AHK: Сканирование нескольких фрагментов на экране и условие

Благодарю.
Я бы тоже изобразил что-то лучшее, чем это безобразие в зацикленном переходе к метке и даже было начал, но задача состояла в другом. Да и чтобы научиться ваять эффективный код, надо вначале научиться ваять НЕэффективный, но рабочий, чтобы потом было с чем сравнивать.

5

Re: AHK: Сканирование нескольких фрагментов на экране и условие

Вы оба хороши!
Спасибо за помощь!