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

标签 javascript c++ sdl emscripten asm.js

当使用 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_GetKeyFromScancodeSDL_GetScancodeFromKey

关于javascript - 使用 asm.js/emscripten/SDL 时如何获取所有关键状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27523776/

相关文章:

javascript - 修改 jQuery 创建的输入

javascript - datefns 格式未完全格式化

javascript - if 语句逻辑未产生期望的结果

c++ - SDL_TTF 绘图 int 到字符串内存泄漏?

c++ - 将 SDL_Surface 像素复制到 STL 容器中

javascript - Ruby on Rails,ajax 分页错误,在更改站点之前有效

c++ - 将整数、短裤和字符映射到位模式

c++ - thread_local 静态成员模板定义 : initialisation fails with gcc

c++ - 为什么此代码会出现运行时错误?

c++ - 使用 Makfile 和 SDL 时遇到问题