#c #ncurses #roguelike
#c #ncurses #Рогалик
Вопрос:
Я не могу заставить эту привязку перемещения работать. Я использую библиотеку ncurses, update_ch и oldch являются глобальными переменными. KEYERR — это макрос, для которого установлено значение -120 (я просто не обрабатываю эти нажатия клавиш). Я пытаюсь ограничить игрока, чтобы он не мог удерживать вверх, вниз, влево или вправо, но он должен продолжать нажимать на них для перемещения. Это не работает, вы все еще можете удерживать клавиши нажатыми и перемещаться. Есть предложения? Моя логика, должно быть, отключена.
if(update_ch != KEYERR)
{
oldch = update_ch;
}
update_ch = getch();
if(oldch == update_ch)
{
update_ch = KEYERR;
}
Ответ №1:
Я пытаюсь ограничить игрока, чтобы он не мог удерживать вверх, вниз, влево или вправо, но он должен продолжать нажимать на них для перемещения.
Я почти уверен, что это невозможно с curses. Если я правильно помню, curses получает только символы с терминала. Это ничего не контролирует в процессе.
Измерение времени между такими показаниями может дать вам подсказку, если пользователь удерживает клавишу вместо непрерывного нажатия. Я имею в виду, когда вы выполняете чтение, запишите следующее
- Считывание ключа
- Время чтения (с точностью до миллисекунды)
При чтении значения задайте следующий вопрос:
- Совпадает ли это с последним ключом?
- В чем разница между текущим временем и временем последнего чтения?
Если это тот же ключ, а разница во времени меньше некоторого порога, вы можете решить, что он удерживает клавишу нажатой.