Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: KREM on August 17, 2020, 02:24:04 PM
-
Всем привет, мне нужна ваша помощь. В одной игре, для крафта предмета нужно сыграть в мини игру, которая заключается в быстром нажатии клавиш, указанных на экране. В моем случае - это стрелочки. Выскакивает картинка с повернутой в сторону (верх, низ и т.д.) стрелкой. Скажу, что я чайник в этой теме, но готов разбираться. Написал я вот такую шнягу.
KEYPRESS(#E)
GETSCREEN
IF_PICTURE_IN(921,770, 996,842, "Screenshot_1.bmp" )
KEYPRESS(#LEFT)
WAITMS(100)
ELSE
END_IF
IF_PICTURE_IN(921,770, 996,842, "Screenshot_2.bmp" )
KEYPRESS(#RIGHT)
WAITMS(100)
ELSE
END_IF
IF_PICTURE_IN(921,770, 996,842, "Screenshot_4.bmp" )
KEYPRESS(#UP)
WAITMS(100)
ELSE
END_IF
IF_PICTURE_IN(921,770, 996,842, "Screenshot_3.bmp" )
KEYPRESS(#DOWN)
WAITMS(100)
ELSE
END_IF
Но, когда я нажимаю старт, программа виснет. Как я понимаю, это из-за непраильной оптимизации. Размер скриншотов разнится от 60х60 до 70х70, формат .bmp . Так же приложение со скриншотом из самой игры. Спасибо заранее! :D :-*
-
Я хотел отталкиваться не от сожердимого изображения, а от координатов определенного пикселя и его цвета. Брать конец и начало стрелки, и, если они соджерат черный пиксель, то нажимается соответствуюющая клавиша. Если такое возможно, то прошу, помогите. :-* :-*
-
Ничего не зависает. Просто у тебя картинки не находит и скрипт ищет по кругу.
Плюс загрузка процессора ~25% т.к. задержки нет после поиска.
А не находит, скорее всего, потому что картинка рендерится со сглаживанием.
Вариантов решения полно.
Можно и картинку искать, но с применением COLORMODE 7 или 8 и задавая процент совпадения.
GETSCREEN(921,770, 996,842)
COLORMODE(8, 921,770, 996,842)
IF_PICTURE_IN(921,770, 996,842, "Left.bmp", -1, 85)
KEYPRESS(#LEFT)
WAITMS(100)
END_IF
Картинки заготовить УЖЕ с применением выбранного режима COLORMODE.
Картинки лучше обрезать примерно так... (во вложении). Минимум пустого пространства вокруг. По возможности левый верхний угол не фон.
Если твои стрелки всегда строго в одном месте, можно найти центр и определять количество чёрных пикселов левее/правее/выше/ниже. Где больше, туда и стрелка
// координаты центра задать точно!
$cx = 958
$cy = 806
GETSCREEN(921,770, 996,842)
COLORMODE(8, 921,770, 996,842)
// считаем кол-во чёрных пикселов левее/правее/выше/ниже центра
$left = PXLCOUNT($cx-12, $cy-6, $cx, $cy+6, 0)
$right = PXLCOUNT($cx, $cy-6, $cx+12, $cy+6, 0)
$up = PXLCOUNT($cx-6, $cy-12, $cx+6, $cy, 0)
$down = PXLCOUNT($cx-6, $cy_y, $cx+6, $cy+12, 0)
IF(($left > $right) & ($left > $up) & ($left > $down))
KEYPRESS(#LEFT)
ELSE
IF(($right > $left) & ($right > $up) & ($right > $down))
KEYPRESS(#RIGHT)
ELSE
IF(($up > $left) & ($up > $right) & ($up > $down))
KEYPRESS(#UP)
ELSE
IF(($down > $left) &($down > $right) & ($down > $up))
KEYPRESS(#DOWN)
ELSE
LOGWRITE("Не нашли")
END_IF
END_IF
END_IF
END_IF
WAITMS(100)
И если всегда совсем всё одинаково, можно определять цвет всего 4 пикселов. На скрине примерно пиксел для "Лево". Но для верности я бы прикрутил всё равно COLORMODE(8 )