2017-01-15 18 views
0

ゲームを作成するのに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の変化として指定されます。

+0

使用している言語の適切なタグを追加してください。それは[tag:C++]のように見えます。 – usr2564301

答えて

0

getchを呼び出すたびにflushinpを呼び出して、先行入力を無視することができます。

+0

ありがとうございます。それはトリックをしたようだ。 – yman

関連する問題