При использовании SDL для ввода с клавиатуры работают только определенные клавиши (стрелки, pageup \ pagedown).
Это код, который я использую:
const auto sdlScanCodes = {...SDL_SCANCODE_A, SDL_SCANCODE_F1, SDL_SCANCODE_SPACE, SDL_SCANCODE_LSHIFT ...etc}
SDL_PumpEvents();
const auto sdlKeyStatesPtr = SDL_GetKeyboardState(nullptr);
for(auto sdlScanCode: sdlScanCodes) {
const auto sdlKeyCode = SDL_SCANCODE_TO_KEYCODE(sdlScanCode);
const bool downKeyCode = sdlKeyStatesPtr[sdlKeyCode];
const bool downScanCode = sdlKeyStatesPtr[sdlScanCode];
}
Обновить:
Обратите внимание, что downScanCode никогда не работает, и, как сказал, downKeyCode работает для некоторых ключей.
Массив, возвращаемый SDL_GetKeyboardState
должны индексироваться по кодам сканирования в SDL 2.0, а не по кодам клавиш, как в SDL 1.2. Попробуйте сделать это без SDL_SCANCODE_TO_KEYCODE
преобразование.
Для справки:
https://wiki.libsdl.org/SDL_GetKeyboardState
Кроме того, я должен отметить, что SDL_SCANCODE_TO_KEYCODE
не является макросом преобразования общего назначения. Он просто устанавливает верхний бит, чтобы определенные коды сканирования могли быть уникальными. использование SDL_GetKeyFromScancode
а также SDL_GetScancodeFromKey
,
Работал, когда я использовал коды клавиш напрямую, вместо того, чтобы конвертировать коды сканирования
const auto sdlKeyCodes = {...SDLK_a, SDLK_F1, SDLK_SPACE, SDLK_LSHIFT ...etc}
SDL_PumpEvents();
const auto sdlKeyStatesPtr = SDL_GetKeyboardState(nullptr);
for(auto sdlKeyCode: sdlKeyCodes ) {
const bool downKeyCode = sdlKeyStatesPtr[sdlKeyCode];
}