gpt4 book ai didi

C++ kbhit 与 if 语句滞后

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:58 24 4
gpt4 key购买 nike

当我将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com