ゲームを作成するのにncursesを使用しようとしています。文字を矢印キー入力で動かすように設定しますが、しばらく矢印キーを押したまま放置すると、その文字はしばらく動いて止まります。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_forを使用しています、私はその後、framrate変更タイムアウトを使用する場合、私は」場合は気づいているためキーを押す。 sleep_forを使用すると一貫したフレームレートが作成されますが、説明したように入力は何らかの形で「スティッキー」です。私は何とかこれを修正する必要があります。タイムアウトを使用して一貫したフレームレートを取得するか、sleep_forを使用しているときに入力を「スティック解除」します。 012-> advance(int、int)player-> advance(int、int)指定された方向に1ステップ移動します。方向は、現在の位置に適用されるxの変化とyの変化として指定されます。
使用している言語の適切なタグを追加してください。それは[tag:C++]のように見えます。 – usr2564301