Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: opalsmoke on November 29, 2015, 09:16:30 PM
-
Пишу скрипт для игры. Мне нужно при нажатии на кнопку F6 один раз запустить цикл, при повторном отменить(завершить) цикл.
$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
// --------------------
В других языках программирования я бы просто написал что-то типа
$a = 0
if ((iskeydown(#F6)=1))
$a=!$a
и этого было бы достаточно, чтоб при повторном нажатии на кнопку значение переменной $a возвращало 0.
Помогите!
-
Только держать F6 придется до момента пока выполнение дойдет до IF(iskeydown(#F6)=1)
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
// --------------------
-
или так
$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
-
Можно засунуть анализ "зажатости" F6 в поток, тогда проблем не будет.
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
// --------------------
-
или так
Как по твоему выполнение выйдет из цикла WHILE($_stop=1)? ::)
-
Можно засунуть анализ "зажатости" F6 в поток, тогда проблем не будет.
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 и в голове уже столько идей для ее применения появилось! Потрясающая программа!
-
или так
Как по твоему выполнение выйдет из цикла WHILE($_stop=1)? ::)
да, мой косяк, изначально писалось для управления потоками, упростил невникая.
-
Так так, поторопился ребята. Код постоянно проскакивает. Приходится по нескольку раз нажимать чтобы включить или выключить его снова. Сейчас пытаюсь разобраться в чем же дело...
-
Все подправил! :) Нужно было просто ввести дополнительно строчку
KEYUP(#F6)
Что бы отпустить клавишу)
-
просто нужно объяснить кликеру, чтоб дождался когда барин соизволют клавишу отпустить, а не насиловать его сигналами об отпускании физически нажатой клавиши.
WHILE(iskeydown(#F6)=1)
WAITMS(100)
END_CYC
-
Да, тут такая маленькая задержка что пока ты жмешь F6 переключатель успевает несколько раз включить и выключить.
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
// --------------------