Author Topic: Определение буквы и нажатие её  (Read 5934 times)

0 Members and 1 Guest are viewing this topic.

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Определение буквы и нажатие её
« on: March 07, 2015, 04:07:27 PM »
Здравствуйте. Пишу скрипт для онлайн игры, который будет определять какая буква написана на экране и нажимать её. Так вот для теста я написал код и заскринил картинку буквы которая мне нужна: , в данном случае это "Y". И написал вот такой код по примеру, но я так понял что код который я написал бредовый:
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, 1920,1080, "1.bmp", -1, 10)
   KEYPRESS(89)
   WAITMS(100)
END_IF

Так вот, как мне реализовать мою задачу?
« Last Edit: March 07, 2015, 04:17:50 PM by UniBlack »

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #1 on: March 07, 2015, 05:01:10 PM »
ну зачем так самокритично, вы на практике работоспособность проверяли, почему всего 10% совпадение картинки? при таком проценте скрипт будет принимать за нужную букву практически весь алфавит.
Дело в том, что я даже пробовал и 100% и 90%, и 80% всё равно не работает. Специально в игре находил момент, когда нужно нажать "Y", но он не нажимает её.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Определение буквы и нажатие её
« Reply #2 on: March 07, 2015, 05:55:12 PM »
Если используешь процент совпадения то в месте с этим нужно применять цветокоррекцию! На экране миллион цветов а после COLORMODE(6) их станет всего 64 и соответственно процент совпадения можно поставить куда выше. Вообще рабочие значения там 70-100. Чем больше процент совпадения тем дольше поиск.

Вот таким отдельным скриптом получаешь скорректированный скриншот, с него вырезаешь картинку для поиска.
Code: (clickermann) [Select]
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6)
SCREENSHOT
HALT

В своем скрипте используешь тот же уровень.
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920,1080, "Y.bmp", -1, 80) // ограничь область поиска тем местом где должны появляться эти буквы!
   KEYPRESS(#Y)
   WAITMS(100)
END_IF

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #3 on: March 07, 2015, 06:44:53 PM »
А если я уберу фон у букв и сделаю его прозрачным, то он найдёт её?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Определение буквы и нажатие её
« Reply #4 on: March 07, 2015, 07:03:40 PM »
Найдет, если и пограничные пикселы сделаешь прозрачными.
Заодно любой участок этого цвета достаточного размера.


UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #5 on: March 07, 2015, 07:08:29 PM »
Найдет, если и пограничные пикселы сделаешь прозрачными.
Заодно любой участок этого цвета достаточного размера.
И если я уберу эти самые пиксели в фотошопе, то мне эту картинку в 24 битах нужно сохранять?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Определение буквы и нажатие её
« Reply #6 on: March 07, 2015, 07:13:42 PM »
В фотошопе не забудь отключить коррекцию цвета, а то он исказит цвета. Картинка должна быть 24 bit

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #7 on: March 07, 2015, 07:14:22 PM »
В фотошопе не забудь отключить коррекцию цвета, а то он исказит цвета. Картинка должна быть 24 bit
Спасибо, сейчас попробую

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #8 on: March 07, 2015, 07:25:15 PM »
Убрал фон, а он стал белым. Что делать? Ещё я не нашёл где отключать коррекцию цвета.
Было:
Стало:

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Определение буквы и нажатие её
« Reply #9 on: March 07, 2015, 07:37:12 PM »
У тебя есть фотошоп но ты не умеешь им тользоваться?!


Настройка цветов


Используй слои!


Цвет прозрачности 65280

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Определение буквы и нажатие её
« Reply #10 on: March 07, 2015, 07:38:33 PM »
Вот образец скрипта
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920,1080, "Y.bmp", 65280, 80) // ограничь область поиска тем местом где должны появляться эти буквы!
   KEYPRESS(#Y)
   WAITMS(100)
END_IF

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #11 on: March 07, 2015, 08:17:39 PM »
Окей, тогда получается "n":
Было:
Стало:

Код получается такой:
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920, 1080, "Y.bmp", 65280, 80) // где искать
   KEYPRESS(#Y)
   WAITMS(100)
   ELSE
   GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920, 1080, "N.bmp", 65280, 80) // где искать
   KEYPRESS(#N)
   WAITMS(100)
   ELSE
END_IF

И если это правильно, то как зациклить?
« Last Edit: March 07, 2015, 08:32:39 PM by UniBlack »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Определение буквы и нажатие её
« Reply #12 on: March 07, 2015, 09:56:42 PM »
Чуть чуть не так

Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, 1920, 1080, "Y.bmp", 65280, 80) // где искать
   KEYPRESS(#Y)
   WAITMS(100)
ELSE
   IF_PICTURE_IN (0,0, 1920, 1080, "N.bmp", 65280, 80) // где искать
      KEYPRESS(#N)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_IF

Если это весь код то он и так будет крутить бесконечно.

UniBlack

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: Определение буквы и нажатие её
« Reply #13 on: March 07, 2015, 10:04:13 PM »
Даже если я ещё два условия добавлю всё равно два END_IF в конце?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Определение буквы и нажатие её
« Reply #14 on: March 07, 2015, 10:47:14 PM »
Даже если я ещё два условия добавлю всё равно два END_IF в конце?

Запомни правило, сколько в скрипте IF столько должно быть и END_IF!
IF - это начало условия
END_IF - обозначение его конца.
Некоторые функции типо IF_PICTURE_IN IF_PIXEL_IN тоже своего рода условия и для них тоже нужно писать END_IF