- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我将 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/
我正在尝试编写一个非常简单的程序,该程序将等待 x 秒,然后检查是否按下了某个键,然后根据此结果将进入代码下方的不同循环。我有这个代码: import msvcrt import time impor
这是我发现的 kbhit 实现,但由于某种原因,它只是等待按下一个键,而不是返回 0 以外的其他结果。它实际上并不像 kbhit 那样起作用... int kbhit(void) { stru
在制作小行星射击游戏时,我使用了 _kbhit() 和 kbhit()。我不是专家,但我认为我遇到的问题是: int run = 1; int main() { while(run){
我在编写贪吃蛇游戏程序时遇到了一些问题。我需要让游戏在 linux 和 windows 上运行。我找到了一些主题如何使用#ifdef Windows 等在 Linux 和 Windows 上清除屏幕。
我正在编写一个程序,其中有一个无限循环。我使用 kbhit() 来检测是否按下了一个键。我也在循环中使用延迟。所以问题是,如果我按下键,我必须等待延迟函数中给出的时间来执行 kbhit() 函数操作.
我编写了一个启动另一个进程并使用 Windows API(CreateProcess、CreatePipe 等)将其标准 I/O 重定向到管道的程序 该程序应启动多个不同的控制台程序并使用 stdio
我想将 kbhit() 用于“按任意键继续”功能。但是,在循环中使用 kbhit() 之后,按下的键存储在标准输入中。所以在下一个 scanf() 中,之前按下的键出现在输入中。 int x,b=0;
我一直在使用 kbhit() 测试一些东西,并发现了延迟无限循环的奇怪行为。在此代码示例中,我将循环延迟为每秒运行 30 次。 #include #include #include #inclu
我一直在用 kbhit() 测试一些东西,发现延迟无限循环的奇怪行为。在此代码示例中,我将循环延迟为每秒运行 30 次。 #include #include #include #include
这个问题已经有答案了: Clearing screen and kbhit() function (2 个回答) 已关闭 9 年前。 我听说 kbhit 不是标准。 键盘检查的标准函数在哪里? 请帮助
只是为了好玩,我尝试用循环打印 kbhit() ,以便在按键后程序无限打印该行,直到再次按下键盘。它编译得很好,运行时只会出现空白屏幕。没有打印品。但按一次按键就会结束程序。但控制台并未关闭。 #in
我今天在大学参加了我的第一次“编程基础”实验室类(class)。不过,有一件事让我感到奇怪:使用 conio.h 中的 while(!_kbhit())(我确定它是一个 C 单元?)来“暂停”控制台输
当我将 kbhit 与 if 语句一起使用时,我在制作的游戏中出现了奇怪的滞后 react 。但是,当我使用 switch 语句时,我没有看到同样的滞后问题发生。这是我在 IF 和 switch 中的
这是程序。 void main( ) { int h, v; h = 1; v = 10; while ( !kbhit( ) || h " ); delay(
我在我的大学上了一门编程课,我正在研究一些程序。我想知道是否可以编写我自己的 kbhit() 函数。如果可能的话,kbhit() 是如何编码的。 目的是我需要知道我使用的函数是如何工作的。 最佳答案
我是 MacOS 上的 C++ 新手。我在使用 kbhit() 时出错在我的程序中。 我用了#include但也有错误,所以我搜索并测试了 #include但错误仍然存在。 最佳答案 不知道这是否
我正在编写一个在控制台窗口中启动的 Microsoft Windows 程序,然后生成一个单独的 gui 窗口以在其中进行一些 directx 渲染。 我试图在焦点位于 directx 窗口时获取键盘
我正在用汇编编写游戏,我需要检查是否按下了某个键。那么,kbhit在Linux中是如何实现的呢? 谢谢。 最佳答案 Google 在 C:http://cboard.cprogramming.com/
#include #include #include #define Ukey 87 #define ukey 119 #define Dkey 115 #define dkey 83 #define
考虑这个 C++ 代码块。 if(_kbhit()){ //printf("Enter\n"); c = getchar(); int d =
我是一名优秀的程序员,十分优秀!