Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: anette25 on November 23, 2017, 10:29:34 AM
-
Пожалуйста, помогите! Как ожидать несколько картинок на экране и запоминать их координаты?
Дело в том, что картинки появляются и исчезают довольно быстро и их много разных (скажем 20), если я сохраню локально все 20, как их одновременно отслеживать на экране с сохранением их координат?
Пока пробую как-то так, на примере 2-х картинок, не получается. С одной картинкой получалось, но была проблема что при быстром ее появлении программа ее не видела. Надо чтобы картинка отображалась на экране секунды 3-4, чтобы программа ее считала - для меня это слишком много.
Вторая проблема что при считывании двух картинок вообще не работает скрипт, по крайней мере так как я пытаюсь.
А мне надо чтобы одновременно считывалось 20 и более картинок, с сохранением их координат. Возможно ли это?
Выход из цикла WHILE должен быть после того как обнаружены все картинки (я их вручную поочередно открываю).
$check = 0
$check2 = 0
WHILE(($check < 0) & ($check2 < 0))
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
$check = 1
print("Картинка 1 найдена в координатах: ", $_return1, ,":", $_return2)
$pic1=$_return1
$pic2=$_return2
ELSE
WAITMS(50)
END_IF
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file2.bmp", -1, 100)
$check2 = 1
print("Картинка 2 найдена в координатах: ", $_return1, ,":", $_return2)
$pic3=$_return1
$pic4=$_return2
ELSE
WAITMS(50)
END_IF
END_CYC
WAITMS(3000)
LCLICK($pic1, $pic2)
print("Картинка 1 нажата в координатах: ", $pic1, ,":", $pic2)
WAITMS(3000)
LCLICK($pic3, $pic4)
print("Картинка 2 нажата в координатах: ", $pic3, ,":", $pic4)
-
Картинка должна находиться менее чем за секунду. Для этого картинка должна быть предельно маленькой, кроме того нужно ограничить зону поиска, ты много тратишь времени на поиск картинки там где её быть не может.
$check1 = 0
$check2 = 0
WHILE(($check1 = 0)|($check2 = 0))
GETSCREEN
IF($check1 = 0)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
$check1 = 1
print("Картинка 1 найдена в координатах: ", $_return1, ,":", $_return2)
$pic1=$_return1
$pic2=$_return2
END_IF
END_IF
IF($check2 = 0)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file2.bmp", -1, 100)
$check2 = 1
print("Картинка 2 найдена в координатах: ", $_return1, ,":", $_return2)
$pic3=$_return1
$pic4=$_return2
END_IF
END_IF
// и тд.
WAITMS(50)
END_CYC
WAITMS(3000)
LCLICK($pic1, $pic2)
print("Картинка 1 нажата в координатах: ", $pic1, ,":", $pic2)
WAITMS(3000)
LCLICK($pic3, $pic4)
print("Картинка 2 нажата в координатах: ", $pic3, ,":", $pic4)
HALT
Это можно написать более оптимально, но нужно знать как ты будешь дальше использовать эти координаты.
Делается это через цикл а собранные координаты помещаются в массив.
-
попробовал, с помощью циклов. писал на скорую руку, нужно тестить, возможны ошибки.
//картинки должны иметь вид file0.bmp file1.bmp file2.bmp ....
//область поиска, ввести свою
$x1 = 100
$y1 = 100
$x2 = 200
$y2 = 200
FOR($a=0,$a<20) //массив номеров картинок , 20 - количество картинок
ARRPUSH ($arr_pic, $a)
ARRPUSH ($arr_pic, 0) //флаг, найдена картинка или нет
END_CY
FOR($a=0,$a<ARRSIZE($arr_pic)) //пустой массив координат
ARRPUSH ($arr_coor, 0)
END_CYC
//////////////////////////////////////
$n_pic = ARRSIZE($arr_pic)/2
WHILE($n_pic > 0) //пока не найдем все картинки
GETSCREEN($x1,$y1,$x2,$y2)
FOR($a=0,$a<ARRSIZE($arr_pic),2) //перебираем поочереди не найденные картинки
IF($arr_pic[$a+1] = 0) //если эта картинка еще не нашлась.
IF_PICTURE_IN ($x1,$y1,$x2,$y2, STRCONCAT("file",$arr_pic[$a], ".bmp"), -1, 100)
print("Картинка ",STRCONCAT("file",$arr_pic[$a], ".bmp")," найдена в координатах: ", $_return1, ,":", $_return2)
$arr_coor[$arr_pic[$a]] = $_return1 //пишем в массив координаты
$arr_coor[$arr_pic[$a]+1] = $_return2
$arr_pic[$a+1] = 1 //флаг, картинка найдена
inc($n_pic,-1)
ELSE
WAITMS(50)
END_IF
END_IF
END_CYC
END_CYC
//////////////////////////////////////
FOR($a=0,$a<ARRSIZE($arr_coor),2) //клики по найденному.
WAITMS(3000)
LCLICK($arr_coor[$a], $arr_coor[$a+1])
print("Картинка " ,$a/2 ," нажата в координатах: ", $arr_coor[$a] ,":", $arr_coor[$a+1])
END_CYC
-
dramster, Oraven, Спасибо большое!!! Я попробую так!
-
Я пробую так, код ниже, половина картинок находит, половину не видит (может в картинках дело?), и те что находит, находит с некоторой задержкой 1-2 сек, что долго. Ломаю голову почему так.
$x[0] = 0
$y[0] = 0
$x2[0] = 0
$y2[0] = 0
$h=100
For($i=0, $i<8) //сюда записываю координаты 2-х картинок, сначала они равны нулю
$x[$i] = 0
$y[$i] = 0
$x2[$i] = 0
$y2[$i] = 0
End_cyc
$k1=200 //координаты области в которой ищем
$k2=200
$k3=800
$k4=800
$n1[0]="jelt1.bmp" //названия картинок
$n2[0]="jelt2.bmp"
$n1[1]="kor-kor1.bmp"
$n2[1]="kor-kor2.bmp"
$n1[2]="kor-kras1.bmp"
$n2[2]="kor-kras2.bmp"
$n1[3]="kor-zel1.bmp"
$n2[3]="kor-zel2.bmp"
$n1[4]="kras1.bmp"
$n2[4]="kras2.bmp"
$n1[5]="oran1.bmp"
$n2[5]="oran2.bmp"
$n1[6]="sv-jelt1.bmp"
$n2[6]="sv-jelt2.bmp"
$n1[7]="zel1.bmp"
$n2[7]="zel2.bmp"
WHILE(($x[0] = 0)|($x[1] = 0)|($x[2] = 0)|($x[3] = 0)|($x[4] = 0)|($x[5] = 0)|($x[6] = 0)|($x[7] = 0)|($x2[0] = 0)|($x2[1] = 0)|($x2[2] = 0)|($x2[3] = 0)|($x2[4] = 0)|($x2[5] = 0)|($x2[6] = 0)|($x2[7] = 0) )
GETSCREEN($k1,$k2,$k3,$k4)
FOR($a=0,$a<8)
IF($x[$a] = 0)
IF_PICTURE_IN ($k1,$k2,$k3,$k4, $n1[$a], -1, $h)
$x[$a] = 1
print("Картинка ",$n1[$a]," найдена в координатах: ", $_return1, ,":", $_return2)
$x[$a]=$_return1
$y[$a]=$_return2
END_IF
END_IF
IF($x2[$a] = 0)
IF_PICTURE_IN ($k1,$k2,$k3,$k4, $n2[$a], -1, $h)
$x2[$a] = 1
print("Картинка ",$n2[$a]," найдена в координатах: ", $_return1, ,":", $_return2)
$x2[$a]=$_return1
$y2[$a]=$_return2
END_IF
END_IF
END_CYC
// и тд.
// WAITMS(50)
END_CYC
//открытие картинок
WAITMS(5000)
For($i=0, $i<8)
LCLICK($x[$i], $y[$i])
print("Картинка 1 нажата в координатах: ", $x[$i], ,":", $y[$i])
WAITMS(500)
LCLICK($x2[$i], $y2[$i])
print("Картинка 2 нажата в координатах: ", $x2[$i], ,":", $y2[$i])
WAITMS(500)
End_cyc
HALT
-
Всё сделала, довольно быстро находится, проблема сейчас в том, что не всегда картинка находится, хотя я ищу маленький ее кусочек, всего 2 пикселя - видимо цветовая гамма каким-то образом чуть меняется. Хотя 90% картинок находится. Подскажите как достичь 100% результата? Может есть какие-то хитрости?