C++ kbhit 与 if 语句滞后

标签 c++ if-statement kbhit

当我将 kbhit 与 if 语句一起使用时,我在制作的游戏中出现了奇怪的滞后 react 。但是,当我使用 switch 语句时,我没有看到同样的滞后问题发生。这是我在 IF 和 switch 中的代码。

当我尝试移动角色时,下面的代码会导致延迟,我必须按两次按钮才能让角色移动。

void PlayerBike()
{
    if (kbhit())
    {
        if ((getch()) == 'w'){PlayerX = PlayerX - 1;}
        else if ((getch()) == 's'){PlayerX = PlayerX +1;}
        else if ((getch()) == 'd'){PlayerY = PlayerY +1;}
        else if ((getch()) == 'a'){PlayerY = PlayerY - 1;}
    }
}

不会导致延迟的 Switch 语句

if (kbhit())
{   
    switch (getch()) 
    {
        case 'w': 
        PlayerX = PlayerX - 1;
        break;

        case 's':
        PlayerX = PlayerX + 1;
        break;

        case 'd':
        PlayerY = PlayerY + 1;
        break;

        case 'a':
        PlayerY = PlayerY - 1;
        break;
    }
}

我想更好地使用 if 语句,因为它看起来更干净。

最佳答案

每次调用 getch 时,您都在等待用户输入一个字符。如果你想向左移动,你实际上必须按四次该键。

修复很简单 - 只调用 getch() 一次:

if (kbhit()) {
    char keystroke = getch();
    if (keystroke == 'w'){PlayerX = PlayerX - 1;}
    else if (keystroke == 's'){PlayerX = PlayerX +1;}
    else if (keystroke == 'd'){PlayerY = PlayerY +1;}
    else if (keystroke == 'a'){PlayerY = PlayerY - 1;}
}

顺便说一句,您在每次 getch() 调用前后都有一对额外的括号。您只需要 getch(),而不是 (getch())

关于C++ kbhit 与 if 语句滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19988336/

相关文章:

c++ - 在 unsigned int 中使用第一位作为标志

PHP 和 MYSQL 使用条件语句在 HTML 中创建表

c - 等待输入最多 X 时间,然后继续执行程序?

c++ - 命名 RVO 的可能性?

c++ - 用于在内存中存储字符串数组的数据结构

mysql - 为什么简单的 If ELSE 语句在 mySql 中不起作用

ios - 在 IBAction 中按下时为 UIButtons 显示不同的颜色以进行测验

c++ - 为什么这个例子只适用于断点

ada - 如何检测 Ada 语言按下的任何键盘按钮

c++ - Qt - 在 QTable 中将复选框居中