有没有人知道如何让SDL_GetKeyState正常工作,而不必设置轮询SDL事件的循环?
int *keystates;
keystates = SDL_GetKeyState(NULL);
SDL_PumpEvents();
std::cout << "Test 1\n";
if (keystates[SDLK_F1]) {
std::cout << "Test 1 Okay\n";
key_ac = true;
emu->setPower(true);
}
这段代码每秒运行100次,但是即使我按住F1键,我仍然没有得到任何输出来说它是成功的。
我没有SDL事件循环,所以可能因为我没有使用它们而丢弃了事件吗?在这种情况下,我怎样才能让SDL过滤掉所有事件?
答案 0 :(得分:4)
SDL_GetKeyState()
只需在程序开始时调用一次。
unsigned char * keys = SDL_GetKeyState(NULL);
然后返回它的值,一个指向数组的unsigned char指针存储在内部。要更新数组的状态,请调用函数SDL_PumpEvents()
。
更新主循环中的数组keys
:
SDL_PumpEvents();
if( keys[ SDLK_m ] )
{
//do stuff
}
编辑:
您可以在第一次调用后尽可能多地调用SDL_GetKeyState()
,并且不会产生内存泄漏。该函数始终返回相同的指针。