3
« on: April 17, 2015, 06:18:22 AM »
Я по образованию гуманитарий, поэтому извините, если пишу слишком глупые вещи.
В общем, у меня получилось нагромождение условий друг на друга.
Изначально задача следующая - посмотреть на область экрана. В этой области на заданных позициях должны быть пикселы. Пикселы должны появляться в строгом порядке (от 1 до 10).
Смотрим на точку 1, если на ней нет пиксела, то делаем так, чтобы он появился. Как только он появился, смотрим на точку 2, есть ли там пиксел...
Очень важно то, что, как только на точке появился пиксель, то про эту точку можно вообще забыть до следующего запуска THREAD.
Вот что у меня получилось(код в спойлере):
THREAD(test, 0)
:odin
IF(PXL(1051,695) = 8355839)
wait(1)
LOGWRITE ("odin - OK")
WAIT(1)
goto(dva)
:dva
IF(PXL(1117,692) = 8355839)
wait(1)
LOGWRITE ("dva - OK")
WAIT(1)
goto(tri)
:tri
IF(PXL(1165,693) = 8355839)
wait(1)
LOGWRITE ("tri - OK")
WAIT(1)
goto(chetire)
:chetire
IF(PXL(1082,717) = 8388479)
wait(1)
LOGWRITE ("chetire - OK")
WAIT(1)
goto(pyat)
:pyat
IF(PXL(1137,737) = 16744447)
wait(1)
LOGWRITE ("pyat - OK")
WAIT(1)
halt // для примера решил остановиться здесь
ELSE
LOGWRITE ("pyat - NE OK")
WAIT(1)
KEYPRESS(#L)
WAIT(1)
LCLICK(1302,96)
WAIT(1)
KEYDOWN(#S)
WAIT(1)
DBLCLICK(1344,402)
DBLCLICK(1344,402)
DBLCLICK(1344,402)
WAIT(1)
KEYUP(#S)
WAIT(1)
KEYPRESS(#L)
WAIT(11)
goto(pyat)
END_IF
ELSE
LOGWRITE ("chetire - NE OK")
WAIT(1)
KEYPRESS(#L)
WAIT(1)
LCLICK(1302,96)
WAIT(1)
KEYDOWN(#S)
WAIT(1)
DBLCLICK(1185,425)
DBLCLICK(1185,425)
DBLCLICK(1185,425)
WAIT(1)
KEYUP(#S)
WAIT(1)
KEYPRESS(#L)
WAIT(11)
goto(chetire)
END_IF
ELSE
LOGWRITE ("tri - NE OK")
WAIT(1)
KEYPRESS(#L)
WAIT(1)
LCLICK(1302,96)
WAIT(1)
KEYDOWN(#S)
WAIT(1)
DBLCLICK(1143,374)
DBLCLICK(1143,374)
DBLCLICK(1143,374)
WAIT(1)
KEYUP(#S)
WAIT(1)
KEYPRESS(#L)
WAIT(11)
goto(tri)
END_IF
ELSE
LOGWRITE ("dva - NE OK")
WAIT(1)
KEYPRESS(#L)
WAIT(1)
LCLICK(1183,100)
WAIT(1)
KEYDOWN(#S)
WAIT(1)
DBLCLICK(1274,237)
DBLCLICK(1274,237)
DBLCLICK(1274,237)
WAIT(1)
KEYUP(#S)
WAIT(1)
KEYPRESS(#L)
WAIT(11)
goto(dva)
END_IF
ELSE
LOGWRITE ("odin - NE OK")
WAIT(1)
KEYPRESS(#L)
WAIT(1)
LCLICK(1183,100)
WAIT(1)
KEYDOWN(#S)
WAIT(1)
DBLCLICK(1270,205)
DBLCLICK(1270,205)
DBLCLICK(1270,205)
WAIT(1)
KEYUP(#S)
WAIT(1)
KEYPRESS(#L)
WAIT(11)
goto(odin)
END_IF
END_THREAD
Это укороченный вариант. На самом деле там не 5, а 10 условий. В принципе, это работает, НО работает криво.
Нужно, чтобы работа была так:
1. Проверка точки 1
1.1. Проверка удачная -> идем к точке 2
1.2. Проверка неудачная -> выполняем "определенные действия" и делаем по новой проверку точки 1. Количество "определенных действий" заранее неизвестно, может хватить 1 раза, может не хватить 100 раз.
2. Проверка точки 2
1.2 Проверка удачная ->идём к точке 3
...
и т.д.
А как это на самом деле:
[spoiler]Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная
Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная
Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная
Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная
Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 НЕ удачная
Проверка точки 1 удачная
Проверка точки 2 удачная
Проверка точки 3 удачная
Проверка точки 4 удачная
Проверка точки 5 удачная
Проверка точки 6 удачная
Проверка точки 7 удачная
Проверка точки 8 НЕ удачная[/spoiler]
То есть программа каждый раз начинает проверять ВСЕ точки, хотя в этом нет никакого смысла. Их статус до перезапуска THREAD не изменится. Как только условие в точке выполнилось, про эту точку нужно забыть и перейти к следующей.
Проблема не в том, что в программе много текста. Проблема не в том, что в логах идёт спам.
Проблема в том, что системные ресурсы тратятся бесполезно, нагружается процессор. Ведь я вам показал только один из потоков скрипта.
Спасибо!