gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:55 25 4
gpt4 key购买 nike

有谁知道如何让 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com