Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: opalsmoke on November 29, 2015, 09:16:30 PM

Title: Повторное нажатие клавиши
Post by: opalsmoke on November 29, 2015, 09:16:30 PM
Пишу скрипт для игры. Мне нужно при нажатии на кнопку F6 один раз запустить цикл, при повторном отменить(завершить) цикл.
Code: (Clickermann) [Select]
$a=0

if ((iskeydown(#F6)=1))
if ($a=1)
$a=0
else
$a=1
END_IF
END_IF
// --------------------
WHILE($a=1)
KEYDOWN(#space)
WAITMS(160)
KEYUP(#space)
WAITMS(160)
KEYDOWN(#enter)
WAITMS(160)
KEYUP(#enter)
WAITMS(160)
END_CYC
// --------------------

В других языках программирования я бы просто написал что-то типа
Code: (Clickermann) [Select]
$a = 0
if ((iskeydown(#F6)=1))
$a=!$a
и этого было бы достаточно, чтоб при повторном нажатии на кнопку значение переменной $a возвращало 0.

Помогите!
Title: Re: Повторное нажатие клавиши
Post by: Oraven on November 29, 2015, 09:40:00 PM
Только держать F6 придется до момента пока выполнение дойдет до IF(iskeydown(#F6)=1)

Code: (clickermann) [Select]
IF(iskeydown(#F6)=1)
   IF($a = 0)
      $a = $a^1
      // включение
   ELSE
      $a = $a^1
      // выключение
   END_IF
END_IF

// --------------------
IF($a=1)
   KEYDOWN(#space)
   WAITMS(160)
   KEYUP(#space)
   WAITMS(160)
   KEYDOWN(#enter)
   WAITMS(160)
   KEYUP(#enter)
   WAITMS(160)
ELSE
   WAITMS(20)
END_IF

// --------------------
Title: Re: Повторное нажатие клавиши
Post by: Золотой on November 29, 2015, 09:45:57 PM
или так
Code: (clickermann) [Select]

$hint = 1 // настройки; выводить сообщения в лог

IF(iskeydown(#F6)=1)
   BEEP(800,200)
   WHILE(iskeydown(#F6)=1)
      WAITMS(100)
   END_CYC
   IF($_stop = 0)
      IF($hint = 1)
         HINTPOPUP(" ","запустить цикл")
      END_IF
      logwrite("запустить цикл")
      INC($_stop,1)
   ELSE
      IF($hint = 1)
         HINTPOPUP(" ","отменить")
      END_IF
      logwrite("отменить")
      INC($_stop,-1)
   END_IF
END_IF

WHILE($_stop=1)
   KEYDOWN(#space)
   WAITMS(160)
   KEYUP(#space)
   WAITMS(160)
   KEYDOWN(#enter)
   WAITMS(160)
   KEYUP(#enter)
   WAITMS(160)
END_CYC
Title: Re: Повторное нажатие клавиши
Post by: Oraven on November 29, 2015, 09:46:27 PM
Можно засунуть анализ "зажатости" F6 в поток, тогда проблем не будет.
Code: (clickermann) [Select]
THREAD(t)
   IF(iskeydown(#F6)=1)
      IF($a = 0)
         $a = $a^1
         HINTPOPUP("Старт")
         // включение
      ELSE
         $a = $a^1
         HINTPOPUP("Стоп")
         // выключение
      END_IF
      WAITMS(20)
   ELSE
      WAITMS(20)
   END_IF
END_THREAD

// --------------------
IF($a=1)
   KEYDOWN(#space)
   WAITMS(160)
   KEYUP(#space)
   WAITMS(160)
   KEYDOWN(#enter)
   WAITMS(160)
   KEYUP(#enter)
   WAITMS(160)
ELSE
   WAITMS(20)
END_IF
// --------------------
Title: Re: Повторное нажатие клавиши
Post by: Oraven on November 29, 2015, 09:48:42 PM
или так

Как по твоему выполнение выйдет из цикла WHILE($_stop=1)?  ::)
Title: Re: Повторное нажатие клавиши
Post by: opalsmoke on November 29, 2015, 10:08:19 PM
Можно засунуть анализ "зажатости" F6 в поток, тогда проблем не будет.
Code: (clickermann) [Select]
THREAD(t)
   IF(iskeydown(#F6)=1)
      IF($a = 0)
         $a = $a^1
         HINTPOPUP("Старт")
         // включение
      ELSE
         $a = $a^1
         HINTPOPUP("Стоп")
         // выключение
      END_IF
      WAITMS(20)
   ELSE
      WAITMS(20)
   END_IF
END_THREAD

// --------------------
IF($a=1)
   KEYDOWN(#space)
   WAITMS(160)
   KEYUP(#space)
   WAITMS(160)
   KEYDOWN(#enter)
   WAITMS(160)
   KEYUP(#enter)
   WAITMS(160)
ELSE
   WAITMS(20)
END_IF
// --------------------
Благодарю Вас! Очень красивый и чистый код у Вас получился! Все работает прекрасно!
P.S Сегодня впервые узнал о подобной программе как Clickermann и в голове уже столько идей для ее применения появилось! Потрясающая программа!
Title: Re: Повторное нажатие клавиши
Post by: Золотой on November 29, 2015, 10:10:53 PM
или так

Как по твоему выполнение выйдет из цикла WHILE($_stop=1)?  ::)

да, мой косяк,  изначально писалось для управления потоками, упростил невникая.
Title: Re: Повторное нажатие клавиши
Post by: opalsmoke on November 29, 2015, 10:26:30 PM
Так так, поторопился ребята. Код постоянно проскакивает. Приходится по нескольку раз нажимать чтобы включить или выключить его снова. Сейчас пытаюсь разобраться в чем же дело...
Title: Re: Повторное нажатие клавиши
Post by: opalsmoke on November 29, 2015, 10:32:24 PM
Все подправил! :) Нужно было просто ввести дополнительно строчку
Code: (Clickermann) [Select]
KEYUP(#F6)Что бы отпустить клавишу)
Title: Re: Повторное нажатие клавиши
Post by: Золотой on November 29, 2015, 10:37:53 PM
просто нужно объяснить кликеру, чтоб дождался когда  барин соизволют  клавишу отпустить, а не насиловать его сигналами об отпускании физически нажатой клавиши.
WHILE(iskeydown(#F6)=1)
     WAITMS(100)
  END_CYC
Title: Re: Повторное нажатие клавиши
Post by: Oraven on November 30, 2015, 06:30:34 AM
Да, тут такая маленькая задержка что пока ты жмешь F6 переключатель успевает несколько раз включить и выключить.

Code: (clickermann) [Select]
THREAD(t)
   IF(iskeydown(#F6)=1)
      WHILE(iskeydown(#F6)=1) // цикл сдержит выполнение пока клавиша не будет отпущена
      END_CYC
      IF($a = 0)
         $a = $a^1
         HINTPOPUP("Старт")
         // включение
      ELSE
         $a = $a^1
         HINTPOPUP("Стоп")
         // выключение
      END_IF
   ELSE
      WAITMS(20)
   END_IF
END_THREAD

// --------------------
IF($a=1)
   KEYDOWN(#space)
   WAITMS(160)
   KEYUP(#space)
   WAITMS(160)
   KEYDOWN(#enter)
   WAITMS(160)
   KEYUP(#enter)
   WAITMS(160)
ELSE
   WAITMS(20)
END_IF
// --------------------