forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Однократное нажатие (http://forum.boolean.name/showthread.php?t=15969)

FireOwl 04.12.2011 14:49

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

Приходится вешать флажок:
Код:

flag = True
if flag and key_pressed: do(); flag = False
if no_keys_pressed: flag = True

Можно это как-то красивее сделать?

dsd 04.12.2011 17:29

Ответ: Однократное нажатие
 
Может ограничить кол-во переключений в секунду? Делать переключение раз в 300-400 миллисекунд и если есть еще вызовы в течении этого отрезка времени игнорировать их.

Команды идентичной KeyHit() я так понимаю нету.

Жека 08.12.2011 14:35

Ответ: Однократное нажатие
 
Обработав нажатие, занулить key_pressed.
(инфу об удержании зажатых кнопок, если надо, хранить в другой переменной key_status)

FireOwl 08.12.2011 15:37

Ответ: Однократное нажатие
 
Да, можно бы и так, но "вигвам" устроен так:
Есть функция, что возвращает массив (список) boolean переменных -
для каждой кнопки своя. И все.
Можно его и сохранить и изменять, но смысла нет, т.к. в секунду ~30 кадров, и апдейтов. И список за секунду раз тридцать сменится. Вполне хватит, чтобы сдвинуть указатель не на один пункт, а почти до конца.
Вот и завел специальную переменную.
Печать с задержкой, как в приличных текстовых редакторах, особенно громоздко выглядит.

P.S. Потом уже "доехал", что есть возможность отлавливать события. И события есть подходящие (KEY_UP, KEY_DOWN)


Часовой пояс GMT +4, время: 18:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot