Как получить все состояния клавиш при использовании asm.js / emscripten / SDL?

При использовании 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 работает для некоторых ключей.

0

Решение

Массив, возвращаемый 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,

1

Другие решения

Работал, когда я использовал коды клавиш напрямую, вместо того, чтобы конвертировать коды сканирования

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];
}
0

По вопросам рекламы [email protected]