C++ C++;区分按键与按键释放

C++ C++;区分按键与按键释放,c++,key,release,curses,getch,C++,Key,Release,Curses,Getch,我目前正在通过getch()while循环收听键盘输入,一切正常。但是,如果我按住左键并向上按,则左键移动将停止,直到我再次按下。我能想到的解决这个问题的唯一方法是知道钥匙是否被持有/何时被释放。我使用的ncurses应该有这个功能,但是通过我所有的搜索,我没有发现任何有用的东西 有问题的俄罗斯方块代码片段: int ch = getch(); while(ch != 'x') { // Handle arrow keys first if (ch == '\033') {

我目前正在通过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();
}

这个问题比你想象的要复杂。这叫做键盘重影。为了确保同时按下多个键时可以工作,您可能需要一个提供防重影功能的专用键盘,或者您可能需要根据本文重新映射键盘。了解更多详细信息。

您确定他面临这个问题吗?我想他是在问键盘监听器是的,我很确定,问题是按键信号没有到达硬件。几天前我遇到了一个类似的问题,我在做SDL,我做了一个RPG游戏,我必须在8个方向移动我的角色。上+左、上+右、下+左、下+右等。问题是当按下上键时,随后按下了左键。角色停止向上移动。我确保SDL_EnableKeyRepeat()处于启用状态,并且问题仍然存在。所以我读了这篇文章,改变了控制。现在很好用。这是一个硬件问题。很容易理解。@OMerObaid,keyListener不是java的东西吗?我认为这是一个C++问题,有人记得游戏明星控制吗?该游戏附带了一个名为
keys
的很好的小工具,它允许您尝试不同的组合键,以查看哪些组合键可以由特定的键盘同时注册。