为什么SDL2中没有SDLK_COLON等效扫描码?

oxf4rvwz  于 2023-02-15  发布在  其他
关注(0)|答案(1)|浏览(108)

我尝试检查是否按下了冒号键,我使用的是英语键盘,这意味着冒号是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,最好的方法是什么?

nukf8bse

nukf8bse1#

没有冒号扫描码,因为ANSI上没有键(美国)布局键盘,生成不带修饰符的冒号。SDLK_COLON的存在是因为存在这样的布局,其中键生成不带修饰符的冒号,比如法语布局中对应于SDL_SCANCODE_PERIOD的键(点.或大于号>)生成冒号:或斜线/(带shift)。因此,如果您在法语键盘上按下该键,则会收到包含SDL_SCANCODE_PERIODSDLK_COLON的事件。
我假设你想知道的是用户是否输入了冒号,这与扫描码甚至键码都无关,因为在处理不同的键盘布局时,你需要一个SDL_TextInputEvent,看看the wiki's tutorial
或者,您可以使用SDL_SCANCODE_SEMICOLON,检查该键对应于用户的什么,并显示该键,以便用户知道要按哪个键(对于法语键盘,它将是ù键)。

相关问题