0

我正在尝试获得键盘输入,但如果它在大约半秒内没有发生,我希望它继续循环的其余部分。我尝试使用 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;
    }

所有帮助将不胜感激。我试图避免使用警报();

4

2 回答 2

0

comnented 调用Sleep表明这是一个使用<conio.h>功能的 Windows 程序,而不是使用 curses 的 *nix 程序。

<conio.h>可以使用该功能kbhit检查是否有按键。

把它放在一个循环中,在每次调用之间休眠一点。

更高级的您可以使用 Windows API。它的等待函数可以在控制台句柄上等待,并具有指定的超时时间。

C++ 标准库没有无缓冲的键盘输入功能。

于 2013-12-07T04:17:21.870 回答
0

尝试使用 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 的实现也取决于您,它不必很长或任何东西,为了简单起见,我只是选择了它。

于 2013-12-07T04:23:20.400 回答