Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: bogdant on March 20, 2015, 10:23:13 AM
-
Здравствуйте!
Помогите, пожалуйста, решить такую задачу:
необходимо, чтобы кликер определил в каком направлении движется объект (цвет уникальный, в зоне работы такой больше не встречается), и в случае, если он движется влево - кликал на одну кнопку, если вправо - то на другую.
Хотя бы подскажите, возможно ли это, и если да, то с помощью чего...
Заранее благодарю всех кто откликнется!
-
как то так
GETSCREEN
IF_PIXEL_IN(300,300, 700,700, 255)
$x1 = $_return1
$y1 = $_return2
DEFINE($x2, $x1)
DEFINE($y2, $y1)
// LOGWRITE ("X ", $x1, " Y ", $y1)
IF(($x1 = $x2)&($y1 = $y2))
WAITMS(50)
ELSE
IF($x1 < $x2)
LOGWRITE ("Влево")
END_IF
IF($x1 > $x2)
LOGWRITE ("Вправо")
END_IF
IF($y1 < $y2)
LOGWRITE ("Вверх")
END_IF
IF($y1 > $y2)
LOGWRITE ("Вниз")
END_IF
$x2 = $x1
$y2 = $y1
WAITMS(50)
END_IF
END_IF
-
Спасибо огромное, вроде все понятно! Завтра буду пробовать :) Так просто! Вот что значит профессионал! А я мозги вывихнул, и все без толку...
-
Еще раз спасибо, все работает именно так как я хотел!
-
Уважаемый Oraven, в процессе возникли пара вопросов по предложенному Вами варианту решения задачи:
1. $y1 = $_return2
DEFINE($y2, $y1) если я правильно понимаю, это объявление переменных, а разве оно не должно предшествовать первому использованию? Если спросил глупость извиняюсь...
2. Срабатывает это примерно в одной трети случаев, я решил, что поскольку участок, на котором определяется направление очень небольшой - 20рх, а движение довольно шустрое, то скрипт просто не успевает, уменьшил WAITMS до 10, но все равно очень часто не срабатывает, можете ли посоветовать что-нибудь, и до какой цифры можно уменьшать WAITMS?
Заранее спасибо!
-
Ты покажи свой вариант.
Если тебе нужно только лево-право, удали лишнее.
Задай в GETSCREEN область снимка.
Пауза там в двух местах, сделай настройку в одном месте если нужно.
Это весь код? Будет крутится в цикле? Тогда нужно разгрузить, если не найдено.
После отладки закоменть выводы в лог - LOGWRITE он работает медленно.
Ну вроде всё.
DEFINE($pause, 10)
GETSCREEN(300,300, 321,321) // область на 1 больше!!!
IF_PIXEL_IN(300,300, 320,320, 255)
$x1 = $_return1
DEFINE($x2, $x1)
IF($x1 ! $x2)
IF($x1 < $x2)
LOGWRITE ("Влево")
ELSE
LOGWRITE ("Вправо")
END_IF
$x2 = $x1
END_IF
WAITMS($pause)
ELSE
WAITMS(10)
END_IF
-
1. $y1 = $_return2
DEFINE($y2, $y1)
$y1 и $y2 - разные переменные.
DEFINE($y2, $y1) Объявляет переменную $y2, и присваивает ей значение переменной $y1.
уменьшил WAITMS до 10, но все равно очень часто не срабатывает
Чем меньше значение задержки, тем быстрее работает скрипт.
-
1. $y1 = $_return2
DEFINE($y2, $y1)
$y1 и $y2 - разные переменные.
уменьшил WAITMS до 10, но все равно очень часто не срабатывает
Чем меньше значение задержки, тем быстрее работает скрипт.
Я понимаю, что $y1 и $y2 разные переменные, но первая из них сначала используется, а затем объявляется, а вторая наоборот, поэтому у меня недоумение, как правильно?
И с уменьшением задержки тоже понятно, но вопрос, до какой степени целесообразно ее уменьшать, чтобы увеличить вероятность того, что пролетающий через диапазон объект не просто будет замечен, но и будет определено его направление
-
Ты покажи свой вариант.
Если тебе нужно только лево-право, удали лишнее.
Задай в GETSCREEN область снимка.
Пауза там в двух местах, сделай настройку в одном месте если нужно.
Это весь код? Будет крутится в цикле? Тогда нужно разгрузить, если не найдено.
После отладки закоменть выводы в лог - LOGWRITE он работает медленно.
Ну вроде всё.
У меня получилось так, но клик срабатывает через раз :(
GETSCREEN
IF_PIXEL_IN(980,340, 1044,360, 657930)
$y1 = $_return2
DEFINE($y2, $y1)
IF($y1 = $y2)
WAITMS(10)
ELSE
IF($y1 > $y2) //Вниз
LCLICK(1115,393)
END_IF
$y2 = $y1
WAITMS(10)
END_IF
END_IF
-
bogdant
DEFINE($y2, $y1) Объявляет переменную $y2, и присваивает ей значение переменной $y1.
Ты не ставь такую короткую задержку, что у тебя происходит за 10 миллисекунд?
Минимальное значение Waitms это 1, что по себе равно 1 миллисекунде, но компьютер просто не успевает осуществить такую задержку. Он не так быстро реагирует, поэтому задержки не производится.
P.S. В одной секунде 1000 миллисекунд.
-
Всё нормально. Задай область для GETSCREEN
GETSCREEN(980,340, 1045,361)
Если конечно у тебя не в привязке работает.
С задержкой поиграйся. Может не стоит сильно уменьшать. Бывает при слишком малой задержке, проц нагружается поиском сильнее, что в свою очередь тормозит приложение которое рисует то, что мы ищем.
Поставишь слишком малое, может рисовать реже. Смысл нам искать каждые 5 мс, если обновлять успевает раз в 100.