Автор Тема: Убрать постоянный клик в одну точку при ожидании картинки  (Прочитано 81 раз)

0 Пользователей и 1 Гость просматривают эту тему.

SimplY

  • Освоившийся
  • **
  • Сообщений: 38
    • Просмотр профиля
Доброго времени суток:)

Код: Clickermann
  1. $time = $_time_t + 3 // таймер на 3 секунды
  2. WHILE($time > $_time_t)
  3.   GETSCREEN(113,214,701,253)
  4.   IF_PIXEL_IN(113,214,701,253, 10198777)
  5.      $time = 0
  6.      LCLICK(321,223)  // 6250861
  7.      WAITMS(200)
  8.   ELSE
  9.      LCLICK(850,341)  // Вечный клик
  10.      WAITMS(100)
  11.   END_IF
  12. END_CYC

Он кликает постоянно в координаты 850,341, пока не закончится таймер. Как сделать так, чтобы если ELSE, то был всего один клик в одно место?

Космич

  • Активный участник
  • ***
  • Сообщений: 229
    • Просмотр профиля
Код: Clickermann
  1. $time = 3001
  2. $timer = $_ms + $time
  3. WHILE($timer > $_ms)
  4.   GETSCREEN(113, 214, 701, 253)
  5.   IF_PIXEL_IN(113, 214, 701, 253, 10198777)
  6.      $timer = 0
  7.   END_IF
  8.   SWITCH($time)
  9.   CASE(0)
  10.      LCLICK(321,223)
  11.   CASE(3001)
  12.      LCLICK(850,341)  
  13.      $time = $time  - 1
  14.   END_SWITCH
  15.   WAITMS(200)
  16. END_CYC
« Последнее редактирование: Декабрь 04, 2019, 12:14:36 pm от Космич »
«Если я не понимаю, зачем нужен этот код, значит этот код не нужен.»

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3633
  • Котэ
    • Просмотр профиля
Космич что ты там за дич понаписал  :o $time не может быть 3001

Код: Clickermann
  1. $time = $_ms + 3000 // таймер на 3 секунды
  2. $f = 0
  3. WHILE($time > $_ms)
  4.   GETSCREEN(113,214,701,253)
  5.   IF_PIXEL_IN(113,214,701,253, 10198777)
  6.      $time = 0
  7.      LCLICK(321,223)  // 6250861
  8.      WAITMS(200)
  9.   ELSE
  10.      IF($f = 0)
  11.         $f = 1 // запрещаем выполнение условия
  12.         LCLICK(850,341)  // Клик один раз за цикл
  13.      END_IF
  14.      WAITMS(100)
  15.   END_IF
  16. END_CYC

SimplY

  • Освоившийся
  • **
  • Сообщений: 38
    • Просмотр профиля
Космич что ты там за дич понаписал  :o $time не может быть 3001

Код: Clickermann
  1. $time = $_ms + 3000 // таймер на 3 секунды
  2. $f = 0
  3. WHILE($time > $_ms)
  4.   GETSCREEN(113,214,701,253)
  5.   IF_PIXEL_IN(113,214,701,253, 10198777)
  6.      $time = 0
  7.      LCLICK(321,223)  // 6250861
  8.      WAITMS(200)
  9.   ELSE
  10.      IF($f = 0)
  11.         $f = 1 // запрещаем выполнение условия
  12.         LCLICK(850,341)  // Клик один раз за цикл
  13.      END_IF
  14.      WAITMS(100)
  15.   END_IF
  16. END_CYC
Спасибо!!!

Космич

  • Активный участник
  • ***
  • Сообщений: 229
    • Просмотр профиля
А почему сразу дичь? просто переменную не добавил
«Если я не понимаю, зачем нужен этот код, значит этот код не нужен.»

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3353
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Вот ты и правда накрутил, аж сам запутался  ;D.
$time не будет равно 0 и при нахождении не будет клика
LCLICK(321,223)
точнее, будет, если это произойдёт точнёхонько через 3000 циклов, вероятность чего стремится к нулю.
Смешались в кучу $time и $timer
Тогда уж перенести LCLICK(321,223) назад под IF_PIXEL_IN, ну и SWITCH заменить IF-ом за ненадобностью.

Иногда хочется сделать элегантно и минимально, повесив на одну переменную разные функции, чего делать не рекомендуется. У нас не ООП, но принцип единственной ответственности полезно соблюдать и на обычных переменных.
Запутался, потому что повесил на $time и время ожидания и флаг одиночного срабатывания.

Помнится я тоже, для уменьшения кода, накручивал разные функции на одну переменную. Сейчас стараюсь такого не делать, разве что специально в целях защиты. Связываем полезные и защитные функции в одной переменной, чтоб её нельзя было легко выкинуть или задать жёстко. И побольше таких переменных.