【发布时间】:2015-12-12 13:07:10
【问题描述】:
我正在用 C++ 构建一个简单的游戏,但我认为输入缓冲区存在很大问题。下面的代码循环工作,我正在检查用户是否按下左键或右键来移动我的角色。如果是这样,我使用 switch 语句来执行适当的操作。但问题是当我按左键一段时间然后将其更改为右键时,我的角色仍然向左移动一段时间。我认为这是因为当我停止按键时,输入缓冲区中仍有字符。我试图以某种方式清理缓冲区来解决这个问题,但我在互联网上找到的所有东西都不起作用。例如,我试图使用
FlushConsoleInputBuffer(stdin);
或
std::cin.clear();
std::cin.sync();
这一切都失败了,因为我用错了,或者根本不是为了我的目的。你能帮我解决我的问题吗?
我的代码:
if(GetAsyncKeyState(VK_RIGHT)!= 0 || GetAsyncKeyState(VK_LEFT) != 0){
getch();
int key = getch();
switch(key){
case KEY_LEFT:
//some code
break;
case KEY_RIGHT:
//some code
break;
case KEY_F1:
//some code
break;
default:
break;
}
}
【问题讨论】:
-
C 没有 I/O 流。如果您不打算使用 OOP,那么使用 C++ 而不是 C 的目的是什么?
-
好吧,您正在使用 OOP:
std::cin是std::istream类型的对象。