C++ kbhit 与 if 语句滞后
C++ kbhit with if statement lag
当我使用 kbhit 和 if 语句时,我在游戏中有一个奇怪的滞后反应。但是,当我使用 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())
。
您的if
代码多次调用getch
,这不是您想要的。
这是因为在你的多个 if/else if 语句中,如果最后一个 if 语句失败,它将多次调用getch
。你可以做的是这样的:
if(kbhit())
{
char chInput = getch();
if (chInput == 'w'){PlayerX = PlayerX - 1;}
else if (chInput == 's'){PlayerX = PlayerX +1;}
else if (chInput == 'd'){PlayerY = PlayerY +1;}
else if (chInput == 'a'){PlayerY = PlayerY - 1;}
}
这只会调用getch
一次,然后按字符键进行检查。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- c++:定义if语句中的模板
- C++ kbhit 与 if 语句滞后