繁体   English   中英

使用asm.js / emscripten / SDL时如何获取所有关键状态?

[英]How do I get all key states when using 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对于某些键有效。

SDL_GetKeyboardState返回的数组应该由SDL 2.0中的扫描码索引,而不是像SDL 1.2中的键码索引。 尝试在不进行SDL_SCANCODE_TO_KEYCODE转换的情况下进行SDL_SCANCODE_TO_KEYCODE

供参考: https : //wiki.libsdl.org/SDL_GetKeyboardState

另外,我应该指出SDL_SCANCODE_TO_KEYCODE不是通用转换宏。 它只是设置一个高位,以便某些扫描码可以是唯一的。 使用SDL_GetKeyFromScancodeSDL_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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM