C++ 在调用sleep时进行键盘输入

C++ 在调用sleep时进行键盘输入,c++,input,sleep,nonblocking,ncurses,C++,Input,Sleep,Nonblocking,Ncurses,我正在尝试使用ncurses创建一个游戏。我将其设置为通过箭头键输入移动角色,但是如果我按住箭头键一段时间,然后放开,角色将在停止之前保持移动一段时间 以下是我的初始化: initscr(); start_color(); cbreak(); noecho(); nodelay(stdscr,TRUE); keypad(stdscr, TRUE); 这是我的主要循环: while(1) { ... if (key == (char)27) { break;

我正在尝试使用ncurses创建一个游戏。我将其设置为通过箭头键输入移动角色,但是如果我按住箭头键一段时间,然后放开,角色将在停止之前保持移动一段时间

以下是我的初始化:

initscr();
start_color();
cbreak();
noecho();
nodelay(stdscr,TRUE);
keypad(stdscr, TRUE);
这是我的主要循环:

while(1) {
    ...

    if (key == (char)27) {
        break;          
    }
    else if (key == KEY_DOWN) {
        key = 0;
        player->advance(0, 1);
    }
    else if (key == KEY_UP) {
        key = 0;
        player->advance(0, -1);
    }
    else if (key == KEY_LEFT) {
        key = 0;
        player->advance(-1, 0);
    }
    else if (key == KEY_RIGHT) {
        key = 0;
        player->advance(1, 0);
    }
    else {
        key = getch();
    }

    std::this_thread::sleep_for(std::chrono::milliseconds {1000/30});
}
我使用sleep_是因为我注意到如果我使用timeout,那么如果我按下一个键,framrate就会改变。使用sleep_创建一致的帧速率,但正如我所解释的,输入在某种程度上是“粘性”的。我需要设法解决这个问题。使用timeout获得一致的framrate,或者在使用sleep_时“取消粘贴”输入


player->advance(int,int)将玩家向指定方向移动一步。方向指定为x方向的变化和y方向的变化,以应用于当前位置。

您可以在每次调用
getch
后调用
flushinp
,以忽略前面的键入。

请为您使用的语言添加适当的标记。看起来像。