SDL_Event->key.keysym.sym 符号键(冒号、双引号、问号...)

问题描述 投票:0回答:1

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,但对于括号、引号、大于/小于、美元符号等,它们不只显示基本键)

c++ user-interface keyboard sdl
1个回答
1
投票

因此,经过多次评论后:要正确读取键值,应使用

unicode
值,这意味着
SDL_EnableUNICODE(1);
位于程序初始化的某个位置(以便
unicode
被填充 - 它确实添加了一点点[在大多数情况下,它是对在某种表中执行查找的函数的函数调用,但可能比这多一点]额外的处理,所以如果不需要,尝试翻译就浪费了每次按键都对应其实际的 unicode 值)。

© www.soinside.com 2019 - 2024. All rights reserved.