【发布时间】:2014-03-21 13:24:53
【问题描述】:
我正在编写一个非常简单的示例程序,它仅向您显示“是否按下了一个键”一次,只要我按下任意数量的键(我按下一个键、两个键或更多),就会触发按键事件),当发生 SDL_KEYUP 事件而按下的键数仅为 1 个键时触发键释放事件,此示例在箭头键上完美运行,但是对于其他键,只要我按下多个键并仅释放其中一个键他们触发了“键已释放”消息,然后是“按下了键”,我未能找到问题所在。
我的代码:
#include <iostream>
#include <SDL2/SDL.h>
using namespace std;
SDL_Event input;
int main(int argc, const char * argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
int y = 0;
int z = 0;
int w = 0;
bool key = false;
const Uint8 *state = SDL_GetKeyboardState(NULL);
while (1){
w = 0;
SDL_PollEvent(&input);
//check for events generated
switch (input.type) {
case SDL_KEYDOWN:
key = true;
break;
case SDL_KEYUP:
key = false;
break;
default:
break;
}
// Check for no. of keys pressed using ASCII code
for (y = 48;y<=127;y++)
if(state[y] == 1)
w++;
// Display the messages
if (key && z==0 )
{
cout << "Key is Pressed" << endl;
z = 1;
}
else if (!key && w < 1 && z==1)
{
cout << "Key is released" << endl;
z = 0;
}
}
return 0;
}
【问题讨论】:
-
如果你的
for循环包含多行代码,你需要{}括号,仅供参考 -
@Cyber 我不认为这是 for 循环触发 if 语句的问题,而 if 语句又触发了以下一条语句,因此括号不会改变任何内容。
-
您是否已经通过调试器确认了这一点?我持怀疑态度。这可能不是问题的原因,但我怀疑它的行为不正确。
-
@Cyber 我刚刚检查了循环线程,该循环没有任何问题。
标签: c++ keyboard keyboard-events sdl-2