Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: АНТИКЛАН on December 30, 2016, 08:22:35 PM
-
IF($TIME < $_time_t)
$TIME = $_time_t + 1
LOGWRITE($CYCLE_STATE)
END_IF
IF(iskeydown(#A)=1)
$CYCLE_STATE = 0
WHILE($CYCLE_STATE = 0)
IF(iskeydown(#A)=1)
$CYCLE_STATE = 1
END_IF
WAITMS(10)
END_CYC
END_IF
Вроде по нажатию клавиши A запись в лог должна останавливаться, а продолжаться при повторном нажатии, но почему-то не работает. Вроде как из-за того что даже без повторного нажатия переменная сбрасывается на единицу. Вроде все правильно написано. Проверьте у себя пожалуйста.
-
добавь цикл задерживающий выполнение, пока клавиша не будет отпущена.
а тепрь для совсем глупых
IF($TIME < $_time_t)
$TIME = $_time_t + 1
LOGWRITE($CYCLE_STATE)
END_IF
IF(iskeydown(#A)=1)
WHILE(iskeydown(#A)=1)
WAITMS(20)
END_CYC
$CYCLE_STATE = 0
WHILE($CYCLE_STATE = 0)
IF(iskeydown(#A)=1)
WHILE(iskeydown(#A)=1)
WAITMS(20)
END_CYC
$CYCLE_STATE = 1
END_IF
WAITMS(10)
END_CYC
END_IF
(я просто из любопытства решил посмотреть, задача не моя я ее не совсем понимаю)
вставил вроде цикл задержку, запись паузит вроде работает, но при старте, до первого нажатия #A он пишит 0 значение тоесть вроде ноль но в цикл WHILE($CYCLE_STATE = 0) не попадает.
это типо отсутствие самой переменной так проявляется? в логах ноль а в цикле не ноль?
-
IF($TIME < $_time_t)
$TIME = $_time_t + 1
LOGWRITE($CYCLE_STATE)
END_IF
IF(ISKEYDOWN(#A)=1)
WHILE(ISKEYDOWN(#A)=1)
WAITMS(20)
END_CYC
WHILE(ISKEYDOWN(#A)=0)
WAITMS(20)
END_CYC
WHILE(ISKEYDOWN(#A)=1)
WAITMS(20)
END_CYC
END_IF
-
IF($TIME < $_time_t)
$TIME = $_time_t + 1
LOGWRITE($CYCLE_STATE)
END_IF
IF(ISKEYDOWN(#A)=1)
WHILE(ISKEYDOWN(#A)=1)
WAITMS(20)
END_CYC
WHILE(ISKEYDOWN(#A)=0)
WAITMS(20)
END_CYC
WHILE(ISKEYDOWN(#A)=1)
WAITMS(20)
END_CYC
END_IF
Вы немного не поняли мне нужна пауза не на время удержания клавиши, а просто кнопка вкл/выкл. И я вообще что-то не пойму логику вашего кода из трёх вайлов...
-
Вы немного не поняли мне нужна пауза не на время удержания клавиши, а просто кнопка вкл/выкл. И я вообще что-то не пойму логику вашего кода из трёх вайлов...
Это работает так как ты шочешь. Запускаешь, логирует. Нажимаешь А, не логирует, снова нажимаешь, логирует.
-
Это работает так как ты шочешь. Запускаешь, логирует. Нажимаешь А, не логирует, снова нажимаешь, логирует.
А можно поподробней? Интересно разобраться.
-
Вообще если тебе нужен переключатель то нужно использовать поток
$t1 = $t1^1 это битовая операция. Присваивает переменной $t1 либо 1 либо 0 в зависимости что там находится.
LOGWRITE($CYCLE_STATE)
WAIT(1)
THREAD(key,1) // поток переключателя
IF(ISKEYDOWN(#A)=1)
WHILE(ISKEYDOWN(#A)=1)
WAITMS(20)
END_CYC
IF($t1 = 0)
$t1 = $t1^1
// включение
$CYCLE_STATE = 1
ELSE
$t1 = $t1^1
// выключение
$CYCLE_STATE = 0
END_IF
WAITMS(20)
ELSE
WAITMS(20)
END_IF
END_THREAD
-
А нафига там $t1 ?
$CYCLE_STATE и есть переключатель. И IF с ELSE не нужен.
-
Вообще если тебе нужен переключатель то нужно использовать поток
$t1 = $t1^1 это битовая операция. Присваивает переменной $t1 либо 1 либо 0 в зависимости что там находится.
LOGWRITE($CYCLE_STATE)
WAIT(1)
THREAD(key,1) // поток переключателя
IF(ISKEYDOWN(#A)=1)
WHILE(ISKEYDOWN(#A)=1)
WAITMS(20)
END_CYC
IF($t1 = 0)
$t1 = $t1^1
// включение
$CYCLE_STATE = 1
ELSE
$t1 = $t1^1
// выключение
$CYCLE_STATE = 0
END_IF
WAITMS(20)
ELSE
WAITMS(20)
END_IF
END_THREAD
Я так и не понял зачем цикл вайл "пока удерживается клавиша". Она не должна удерживаться. Она должна просто нажиматься и переключать значение переменной. И от этого процесс должен либо входить в цикл с ожиданием повторного нажатия либо проверять таймер и первое нажатие. У меня же в первом посте написан правильный код, который должен работать если его поместить в поток. Я насчет этого писал, что правильный код не работает.
-
За тем чтобы дело пошло только после отпускания клавиши.
-
Я так и не понял зачем цикл вайл "пока удерживается клавиша". Она не должна удерживаться. Она должна просто нажиматься и переключать значение переменной. И от этого процесс должен либо входить в цикл с ожиданием повторного нажатия либо проверять таймер и первое нажатие. У меня же в первом посте написан правильный код, который должен работать если его поместить в поток. Я насчет этого писал, что правильный код не работает.
Что значит "не работает"? Работает, но так, как написан.
У тебя от строки 5 до 8 пройдёт максимум 1 мс. За это время ты отпустить клавишу не успеешь даже если будешь пол года тренироваться. Поэтому второе условие будет почти всегда успевать сработать с первым.
-
Что значит "не работает"? Работает, но так, как написан.
У тебя от строки 5 до 8 пройдёт максимум 1 мс. За это время ты отпустить клавишу не успеешь даже если будешь пол года тренироваться. Поэтому второе условие будет почти всегда успевать сработать с первым.
То есть все таки я правильно думал что когда я нажимаю клавишу в первый раз у меня срабатывают все условия до второго нажатия включительно и переменная сразу же становится снова равной единице.
-
Да. Поэтому и нужно сделать цикл с задержкой до отпускания клавиши. Чтоб срабатывание было чётким, одно нажатие - одно переключение.
-
Да. Поэтому и нужно сделать цикл с задержкой до отпускания клавиши. Чтоб срабатывание было чётким, одно нажатие - одно переключение.
Понял. Делаю.
-
Посидел. Подумал. И согласился. Решение о торможении потока через WHILE будет самым аккуратным и понятным на сегодняшний день. Спасибо всем кто участвовал в беседе. С вами я стал еще чуть опытнее. Беру эту фишку на вооружение. :)