C++ 在调用sleep时进行键盘输入
我正在尝试使用ncurses创建一个游戏。我将其设置为通过箭头键输入移动角色,但是如果我按住箭头键一段时间,然后放开,角色将在停止之前保持移动一段时间 以下是我的初始化: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;
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
,以忽略前面的键入。请为您使用的语言添加适当的标记。看起来像。