0

現在、getch() while ループを介してキーボード入力をリッスンしており、すべてがうまく機能しています。ただし、左を押しながら上に押すと、もう一度押すまで左の動きが停止します。これを解決する唯一の方法は、キーが保持されているかどうか、またはキーがいつ解放されたかを知ることです。おそらくこの機能を備えていると思われるncursesを使用していますが、すべての検索で有用なものが見つかりませんでした。

問題のテトリス コード スニペット:

int ch = getch();
while(ch != 'x') {
   // Handle arrow keys first
   if (ch == '\033') {
      getch(); // Get rid of slash
      switch (getch()) {
         case 'A': rotate();    redraw(); break; // Up
         case 'B': move(DOWN);  redraw(); break; // Down
         case 'C': move(RIGHT); redraw(); break; // Right
         case 'D': move(LEFT);  redraw(); break; // Left
      }
   } else {
      switch(ch) {
        // Stuff not relevant to this question
      }
   }
   ch = getch();
}
4

1 に答える 1

0

この問題は、あなたが思っているよりも複雑です。キーボードゴーストと呼ばれるものです。複数のキーを同時に押したときに確実に機能するようにするには、アンチゴースト機能を提供する専用のキーボードが必要になるか、この記事に従ってキーボードを再マッピングする必要がある場合があります。詳細については、こちらをお読みください。

于 2014-01-22T06:16:00.730 に答える