SDL获取键盘状态而不使用事件

时间:2013-07-10 20:20:21

标签: c++ events keyboard gtk sdl

有没有人知道如何让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过滤掉所有事件?

1 个答案:

答案 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(),并且不会产生内存泄漏。该函数始终返回相同的指针。