SDL特定小键盘组合键下部分按键状态无法检测问题求助
SDL特定按键组合下的键盘检测失效问题
使用SDL(libsdl2-dev版本:2.0.14+dfsg2-3+deb11u1)开发程序时,遇到特定按键组合导致部分键盘按键无法被检测的问题。即使简化代码仅通过SDL_GetKeyboardState打印End、Home、Page Up、Page Down、Insert、Delete的按键状态,问题依然存在。
例如:单独按End键能正常显示已按下,但按住SDL_SCANCODE_KP_PLUS + SDL_SCANCODE_KP_9后再按End键,程序无法检测到End键被按下。
以下是已确认的无效组合:
- 按住
SDL_SCANCODE_KP_PLUS+SDL_SCANCODE_KP_9时,无法检测SDL_SCANCODE_HOME、SDL_SCANCODE_END、SDL_SCANCODE_PAGEDOWN、SDL_SCANCODE_PAGEUP - 按住
SDL_SCANCODE_KP_PLUS+SDL_SCANCODE_KP_8时,无法检测SDL_SCANCODE_HOME、SDL_SCANCODE_END、SDL_SCANCODE_INSERT - 按住
SDL_SCANCODE_KP_PLUS+SDL_SCANCODE_KP_7时,无法检测SDL_SCANCODE_HOME、SDL_SCANCODE_END、SDL_SCANCODE_INSERT、SDL_SCANCODE_DELETE
其他小键盘数字按键无此问题,该问题在树莓派Bullseye和Windows 10的WSL环境中均可复现,且Num Lock开启或关闭时都会出现。
测试代码
#include <SDL2/SDL.h> #include <iostream> #include <map> int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_CreateWindow( "Keyboard State Monitor", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0 ); SDL_Event event; bool running = true; while (running) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { running = false; } } // Get the current state of all keys const Uint8* currentKeyState = SDL_GetKeyboardState(NULL); // Keys to monitor std::map<SDL_Scancode, const char*> keysToMonitor = { {SDL_SCANCODE_END, "End"}, {SDL_SCANCODE_HOME, "Home"}, {SDL_SCANCODE_PAGEUP, "Page Up"}, {SDL_SCANCODE_PAGEDOWN, "Page Down"}, {SDL_SCANCODE_DELETE, "Delete"}, {SDL_SCANCODE_INSERT, "Insert"} }; // Print the state of monitored keys std::cout << "\nKey State:" << std::endl; for (const auto& entry : keysToMonitor) { SDL_Scancode scancode = entry.first; const char* keyName = entry.second; if (currentKeyState[scancode]) { std::cout << keyName << ": YES" << std::endl; } else { std::cout << keyName << ": 0" << std::endl; } } SDL_Delay(100); // To prevent the loop from running too fast } SDL_DestroyWindow(window); SDL_Quit(); return 0; }
编译命令
g++ -o pressed_check IsPressedCheck.cc -lSDL2
内容的提问来源于stack exchange,提问作者dbiber
相关产品推荐
相关产品推荐

