0

http://www.libsdl.org/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 和 key 分号,那么我应该使用冒号。然而,在按住 shift 的同时重新映射所有键似乎相当痛苦。

有没有其他人找到解决这个问题的方法?

编辑:

查看 key 函数内部的值表明无论是否保持 shift 键都是相同的,并且它不特定于分号/冒号。所有键都相同(对于字母键有意义,没有 SLDK_A 只有 SDLK_a,但对于括号、引号、大于/小于、美元符号等,它们不会仅显示基本键)

4

1 回答 1

1

所以,在反复评论之后:为了正确读取键值,unicode应该使用该值,这意味着SDL_EnableUNICODE(1);在程序初始化的某个地方(这样就unicode可以填写 - 它确实添加了一点点[在大多数情况下,它是函数调用到在某种表中执行查找的函数,但它可能比额外处理多一点,所以如果不需要它,尝试将每个按键转换为它们各自的实际 unicode 值是浪费的)。

于 2013-07-22T15:25:55.943 回答