簡體   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