c++ - SDL 不使用事件获取键盘状态

标签 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 过滤掉所有事件?

最佳答案

SDL_GetKeyState() 只需在程序开始时调用一次。

unsigned char * keys = SDL_GetKeyState(NULL);

然后它返回的值,一个指向数组的unsigned char指针被存储在内部。要更新数组的状态,请调用函数 SDL_PumpEvents()

在主循环中更新数组 keys:

SDL_PumpEvents();

if( keys[ SDLK_m ] )
{
    //do stuff
}

编辑: 您可以在第一次调用后随意调用 SDL_GetKeyState(),并且不会造成内存泄漏。该函数始终返回相同的指针。

关于c++ - SDL 不使用事件获取键盘状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580166/

相关文章:

c++ - 无法破译来自链接器的错误

javascript - xmlhttp.responseText 如何在 xmlhttp.send() 之前赋值

javascript - 如何使用 JavaScript 计算鼠标的特定移动

c++ - 重新启动后禁用USB键盘

react-native - 如何使用 react native Keyboard.scheduleLayoutAnimation(event) 方法?

react-native - 如何在 React Native for Android 上设置 keyboardType = "web-search"或 "url"?

c++ - 为什么我用reserve分配存储后不能迭代打印vector的内容?

c++ - 为什么 push_back 签名是 void push_back (const value_type& val) 而不是 void push_back (value_type val)?

c++ - 如何使 live555 服务器使用 rtsp 地址而不是文件进行流式传输

c# - 日历控件的点击事件