Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL在不使用事件的情况下获取键盘状态_C++_Events_Keyboard_Gtk_Sdl - Fatal编程技术网

C++ SDL在不使用事件的情况下获取键盘状态

C++ SDL在不使用事件的情况下获取键盘状态,c++,events,keyboard,gtk,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(

有人知道如何让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);
}
int*键状态;
keystates=SDL_GetKeyState(NULL);
SDL_泵通风孔();
std::cout
SDL\u GetKeyState()
只需在程序开始时调用一次

unsigned char * keys = SDL_GetKeyState(NULL);
然后,它返回的值在内部存储指向数组的无符号字符指针。要更新数组的状态,请调用函数
SDL\u PumpEvents()

要更新主循环中的数组

SDL_PumpEvents();

if( keys[ SDLK_m ] )
{
    //do stuff
}
编辑:
您可以在第一次调用后调用
SDL\u GetKeyState()
,并且不会造成内存泄漏。函数总是返回相同的指针。

您的具体问题是什么?如何使事物工作太广泛。如何让SDL_GetKeyState正常工作,而不必设置轮询SDL事件的循环?很抱歉,我应该按照文档中的指定使用它,而不是使用事件循环,从而使它变得更清晰。文档状态为“注意:使用SDL_PumpEvents更新状态数组”。但是,这在我的情况下不起作用。那么,让它起作用吧,这就是我可以帮助您提供的信息的全部内容。这本身对我来说很好。我刚刚发现我的问题是因为我同时使用GTK和SDL,似乎SDL在使用GTK时不能正确处理事件。不过,我会将此解决方案标记为正确,因为在正常情况下,这是正确的答案。对我来说,我想我必须寻找一种方法让gtk处理键盘输入或将它们传递给sdl。但这是一个完全不同的问题。