C ++区分按键与按键发布

时间:2014-01-22 05:36:48

标签: c++ key release curses getch

我正在通过getch()循环播放键盘输入,一切都运行良好。但是,如果我向左按住并向上按,则左移动将停止,直到我再次按下它为止。我能想到解决这个问题的唯一方法就是要知道密钥是否被保留/何时被释放。我正在使用据说具有这种能力的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();
}

1 个答案:

答案 0 :(得分:0)

这个问题比你想象的要复杂得多。它被称为键盘重影。要确保同时按下多个键时,您可能需要一个专门的键盘来提供反重影功能,或者您可能需要按照本文重新映射键盘。 Read it here了解更详细的信息。