Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: d2_bot on November 28, 2020, 01:11:47 PM
-
Всем привет, помогите пожалуйста найти решение.
Есть 2 поля для работы на примере изображения
(https://a.radikal.ru/a03/2011/ce/f71f10948393.jpg)
Для начала нужно найти любую из точек на правом поле, сделать по ней клик, определить ее координаты и в зависимости от того какая координата выпадет, переместить курсор на левую заданную за ранее координату по отношению к координате на правом поле, и сделать клик уже на левом поле.
Затем нужно снова проверить правое поле на наличие других точек(либо делать это сразу считая точки, не представляю даже как лучше), если они есть, то определить коры и так же переместить мышь на левое поле, относительно заданных координат правого и так далее, пока не останется точек.
Возможно такое?)
-
Я так понял, что красная область - это уменьшенная копия зеленой области. Если так, то тут проще некуда. IF_PIXEL_IN или IF_PICTURE_IN ищет с лева на право сверху вниз и никак иначе.
Ищем в правом поле точку к примеру с помощью IF_PIXEL_IN. Координаты соответственно прописываем именно красной области. Он находит самую верхнюю точку. Клик по ней. Потом IF_PIXEL_IN с координатами зеленой области. Он так же находит именно самую верхнюю точку. Клик. Продолжаем, пока точки не закончатся.
-
Все понято правильно, но найти на большом поле точку нераально каждая картинка уникальна, а вот положение получается одно и тоже, на маленьком поле найти картинку по пикселю не проблема. Точки это условности в данном случае
-
Ну так ищи не по пикселю в большом поле, а по картинке. Используй colormode.
-
Перепробовал все колормоды от 0 до 7, в редких случаях находит, в общем у меня вариант только такой заморочки, чтобы если в правом поле пиксель найден в координате 0,0, то в большом поле он кликнул по 15,15 допустим(соответственно каждой координате из правого поля мне нужно будет забивать вручную координату для левого
-
Ладно, тогда уж проще использовать коэффициент смещения. Тоесть нужно точно рассчитать, во сколько раз левое поле больше правого, и соответственно смещать курсор.
Пример - правое поле в координатах (500, 100, 600, 200) - 100х100, левое (100, 100, 400, 400) - 300х300. 300/100=3 - это тот самый коэффициент.
К примеру в правом поле нашло точку в координатах (520, 140), значит в левом получится (520-500)*3+100 = 160 - это координат а Х, (140-100)*3+100=220 - это координата У, в левом поле.
На переменных будет выглядеть так, надеюсь нигде не ошибся:
//($x1, $y1, $x2, $y2) - область левого поля
//($x3, $y3, $x4, $y4) - область правого поля
$kx = ($x2-$x1)/($x4-$x3)
$ky = ($y2-$y1)/($y4-$y3)
$x = int(($_return1-$x3)*$kx+$x1) // координата х в левом поле, где $_return1 - это найденная координата х в правом поле
$y = int(($_return2-$y3)*$ky+$y1) // координата y в левом поле, где $_return2 - это найденная координата y в правом поле
-
Огромное спасибо) то что нужно, и в будущем возможно пригодиться, буду пробовать)
-
Ладно, тогда уж проще использовать коэффициент смещения. Тоесть нужно точно рассчитать, во сколько раз левое поле больше правого, и соответственно смещать курсор.
Пример - правое поле в координатах (500, 100, 600, 200) - 100х100, левое (100, 100, 400, 400) - 300х300. 300/100=3 - это тот самый коэффициент.
К примеру в правом поле нашло точку в координатах (520, 140), значит в левом получится (520-500)*3+100 = 160 - это координат а Х, (140-100)*3+100=220 - это координата У, в левом поле.
На переменных будет выглядеть так, надеюсь нигде не ошибся:
//($x1, $y1, $x2, $y2) - область левого поля
//($x3, $y3, $x4, $y4) - область правого поля
$kx = ($x2-$x1)/($x4-$x3)
$ky = ($y2-$y1)/($y4-$y3)
$x = int(($_return1-$x3)*$kx+$x1) // координата х в левом поле, где $_return1 - это найденная координата х в правом поле
$y = int(($_return2-$y3)*$ky+$y1) // координата y в левом поле, где $_return2 - это найденная координата y в правом поле
И все таки не просто... подскажи пожалуйста куда вписывать координаты правого и левого поля
$kx = ($x2-$x1)/($x4-$x3)
$ky = ($y2-$y1)/($y4-$y3)
-
$x1 = //левое поле
$y1 =
$x2 =
$y2 =
$x3 = //правое поле
$y3 =
$x4 =
$y4 =
$kx = ($x2-$x1)/($x4-$x3)
$ky = ($y2-$y1)/($y4-$y3)
$x = int(($_return1-$x3)*$kx+$x1) // координата х в левом поле, где $_return1 - это найденная координата х в правом поле
$y = int(($_return2-$y3)*$ky+$y1) // координата y в левом поле, где $_return2 - это найденная координата y в правом поле
-
Спасибо большое, только походу все равно делаю что-то не так
wait(3)
$x1 = 4 //левое поле
$y1 = 89
$x2 = 891
$y2 = 468
$x3 = 889 //правое поле
$y3 = 113
$x4 = 1012
$y4 = 161
$kx = ($x2-$x1)/($x4-$x3)
$ky = ($y2-$y1)/($y4-$y3)
$x = int(($_return1-$x3)*$kx+$x1) // координата х в левом поле, где $_return1 - это найденная координата х в правом поле
$y = int(($_return2-$y3)*$ky+$y1) // координата y в левом поле, где $_return2 - это найденная координата y в правом поле
IF_PIXEL_IN (889,113, 1012,161, 2928328)
LCLICK($_return1, $_return2)
end_if
halt
И еще вопрос - как с такими функциями, сделать например, чтобы делался клик сначала по правому полю где найден пиксель, затем уже по относительным координатам делался клик на левом поле?
-
wait(3)
$x1 = 4 //левое поле
$y1 = 89
$x2 = 891
$y2 = 468
$x3 = 889 //правое поле
$y3 = 113
$x4 = 1012
$y4 = 161
GETSCREEN // не забывай про гетскрин. ты не прописал, а я долго голову себе ломал... не работало
IF_PIXEL_IN ($x3,$y3, $x4,$y4, 2928328)
LCLICK($_return1, $_return2) // клик по правому полю
//рассчет коорднат точки в левом поле
$kx = ($x2-$x1)/($x4-$x3)
$ky = ($y2-$y1)/($y4-$y3)
$x = int(($_return1-$x3)*$kx+$x1) // координата х в левом поле, где $_return1 - это найденная координата х в правом поле
$y = int(($_return2-$y3)*$ky+$y1) // координата y в левом поле, где $_return2 - это найденная координата y в правом поле
//клик в левое
wait(2)
LCLICK($x, $y)
end_if
halt