флип-флоп FunT-флип-флоп в C - Как компактных
Я пытался запрограммировать некоторые функции с геймпадом в С в течение некоторого времени. Когда кнопка удерживается на геймпаде, вызов vexRT[Btn4D]
(«4D» означает только четвертый набор кнопок в нисходящем направлении) вернет либо true, либо false. Если у вас есть логическое значение, скажем x, и вы хотите включить «x» с одним нажатием и отпустить кнопку и оставить ее включенной, нет предопределенного простого метода/функции. Так что я провел некоторое время и придумал простой триггер, который можно увидеть здесь:
if (vexRT[Btn7D]) {
if (y)
x = false;
else
x = true;
}
else if (counter == 0) {
counter = 25;
if (x)
y = true;
else
y = false;
}
else
counter--;
Тогда просто, вы могли бы просто сказать, если (х) или если (х!) И делать все, что вы хотите делать.
Проблема в том, что у меня есть 8 кнопок на геймпаде, и я хочу, чтобы у каждого из них была своя способность «перевернуть». Я мог бы просто скопировать код восемь раз, создав новую переменную, такую как x2 и counter2, однако это кажется излишним. Я попытался сделать метод, который бы сократил общий код, но я знаю, что он не работает. Вот это все равно:
bool tFlip(bool x) {
bool y = !x;
if (y)
return true;
else
return false;
}
Короче говоря, если кто-нибудь знает, как правильно код эти вещи, которые я хотел бы знать, как это сделать. Я пробовал поиск в Google, но ничего не могу найти. Благодарю.
TLDR: Любой знает, как закодировать флип-флоп?
EDIT: Это все внутри цикла, так что я не могу просто сделать
x = !x
, как он будет постоянно вызываться, когда кнопка удерживается в нажатом положении; значение x будет по существу «случайным» при выпуске. Y должен действовать как «дождаться нажатия клавиши», так как нет встроенного метода нажатия нажатой клавиши.
Что в мире 'counter' и' y' в вашем первом коде? Что не так с 'x = y' и/или' x =! Y', что вы чувствуете необходимость в неуклюжих операторах 'if' /' else'? Вы никогда не слышали о массивах? –
Извините, мне трудно объяснить проблемы, которые появляются в реальной жизни. Счетчик - это всего лишь задержка в 25 миллисекунд, потому что геймпад - это мусор и не может слишком быстро нажимать кнопку. Я не могу этого сделать, потому что все это помещено внутри цикла while. Это означало бы, что каждый миллисекунда значение x переключится. Когда джойстик нажат, ему необходимо один раз переключить значение, а затем не переключаться снова, пока кнопка не будет отпущена и не будет нажата снова. Если бы какой-либо способ обнаружить нажатие клавиши/нажатия клавиши на джойстике, это было бы в тысячу раз проще. –
Итак, чтобы достичь задержки в 25 миллисекунд, вы каким-то образом в другом месте гарантируете, что цикл повторяется ровно один раз за миллисекунду? –