我尝试检查是否按下了冒号键,我使用的是英语键盘,这意味着冒号是shift
+ ;
,我的想法是读取键盘状态,然后检查扫描码的状态:
SDL_PumpEvents();
const uint8 *keyState = SDL_GetKeyboardState(NULL);
printf("keystate %d\n", keyState[scancode]);
但后来我意识到有一个扫描码的键盘冒号SDL_SCANCODE_KP_COLON
相当于SDLK_KP_COLON
,但没有扫描码的SDLK_COLON
(如果你想知道:我尝试了键盘版本,但不工作)。
所以,我想知道为什么SDLK_COLON
没有等效的scancode,最好的方法是什么?
1条答案
按热度按时间nukf8bse1#
没有冒号扫描码,因为ANSI上没有键(美国)布局键盘,生成不带修饰符的冒号。
SDLK_COLON
的存在是因为存在这样的布局,其中键生成不带修饰符的冒号,比如法语布局中对应于SDL_SCANCODE_PERIOD
的键(点.
或大于号>
)生成冒号:
或斜线/
(带shift)。因此,如果您在法语键盘上按下该键,则会收到包含SDL_SCANCODE_PERIOD
和SDLK_COLON
的事件。我假设你想知道的是用户是否输入了冒号,这与扫描码甚至键码都无关,因为在处理不同的键盘布局时,你需要一个
SDL_TextInputEvent
,看看the wiki's tutorial。或者,您可以使用
SDL_SCANCODE_SEMICOLON
,检查该键对应于用户的什么,并显示该键,以便用户知道要按哪个键(对于法语键盘,它将是ù
键)。