https://web.archive.org/web/20130728100527/http://www.libsdl.org:80/docs/html/sdlkey.html
以下是 SDL 文档中列出的关键枚举。 具体来说,对于这个问题,我们只需要一个子集。
SDLK_COLON //value is 58 (ascii)
SDLK_SEMICOLON //value is 59 (ascii)
//Code Example illustrating question
void KText::OnKeyDown(SDLKey key, SDLMod mod, Uint16 unicode) {
if(key == SDLK_COLON) exit(1);
}
当我点击分号时,显然它不会退出。当我按住 Shift 并按分号(键入冒号)时,它仍然没有退出。我测试过,无论我是否按住shift,它都会抛出默认键。这可能是设计使然,也可能是一个错误。我可以简单地说,如果我按住shift和关键分号,那么我应该使用冒号代替。然而,在按住 Shift 的同时重新映射所有键似乎相当痛苦。
还有其他人找到解决此问题的方法吗?
编辑:
查看 key 函数内的值表明,无论是否按住 Shift 键,键都是相同的,并且它不特定于分号/冒号。对于所有键都是相同的(对于字母键有意义,没有 SLDK_A 只有 SDLK_a,但对于括号、引号、大于/小于、美元符号等,它们不只显示基本键)
因此,经过多次评论后:要正确读取键值,应使用
unicode
值,这意味着 SDL_EnableUNICODE(1);
位于程序初始化的某个位置(以便 unicode
被填充 - 它确实添加了一点点[在大多数情况下,它是对在某种表中执行查找的函数的函数调用,但可能比这多一点]额外的处理,所以如果不需要,尝试翻译就浪费了每次按键都对应其实际的 unicode 值)。