Я пытаюсь получить ввод с клавиатуры, но если это не произойдет примерно через полсекунды, я хочу, чтобы оно продолжалось до конца цикла. Я пытался использовать kbhit (); но он не будет ждать ввода, он просто зацикливается без остановки. Это рассматриваемый цикл:
while(flags)
{
gameing.updateDraw(0, 0);
keyIn = getch();
//Sleep(20);
switch(keyIn)
{
case UP_ARROW:
flags = gameing.updateDraw(-1, 1);
break;
case DOWN_ARROW:
flags = gameing.updateDraw(1, 1);
break;
case WKEY:
flags = gameing.updateDraw(-1, 2);
break;
case SKEY:
flags = gameing.updateDraw(1, 2);
break;
}
Вся помощь будет принята с благодарностью. Я пытаюсь избежать использования будильника ();
Комментированный вызов Sleep
указывает, что это программа Windows, использующая <conio.h>
функциональность, а не программа * nix, использующая проклятия.
С <conio.h>
Вы можете использовать kbhit
функция, чтобы проверить, есть ли нажатие клавиши.
Поместите это в цикл, который спит немного между каждым вызовом.
Более продвинутый вы можете использовать Windows API. Его функции ожидания могут ожидать на дескрипторе консоли с заданным временем ожидания.
Стандартная библиотека C ++ не имеет небуферизованной функциональности ввода с клавиатуры.
Попробуйте использовать что-то вроде ctime.h или chrono, чтобы получить разницу во времени. Тогда сделай что-нибудь вроде
long lastTime=CurrentTime();
int input=0;
while(!(input=kbhit()) && CurrentTime()-lastTime < 20);
if(input)
// do stuff with input
// do all the other stuff
lastTime=CurrentTime();
Отказ от ответственности. Я не особенно знаком с kbhit и другими вещами, но, основываясь на небольшом поиске, кажется, что это должно сработать. Также реализация CurrentTime зависит от вас, она не должна быть длинной или чем-то еще, я просто выбрал это для простоты.