英文:
Why there is no SDLK_COLON equivalent scancode in SDL2?
问题
我试图检查是否按下了冒号键,我使用的是英语键盘,这意味着冒号是 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
的等效扫描码,以及如何更好地实现这个目标?
英文:
I'm trying to check if the colon key is pressed, I'm using a English keyboard which means colon is shift
+ ;
, my though was to read the keyboard state and then check the status of the scancode:
SDL_PumpEvents();
const uint8 *keyState = SDL_GetKeyboardState(NULL);
printf("keystate %d\n", keyState[scancode]);
but then I realized there is a scancode for the keypad colon SDL_SCANCODE_KP_COLON
equivalent toSDLK_KP_COLON
, but there is no scancode for SDLK_COLON
(In case you are wondering: I tried with the keypad version and is not working).
So, I wonder why there is no equivalent scancode for SDLK_COLON
and what's the best way to do this instead?
答案1
得分: 2
没有冒号扫描码,因为在美国标准键盘布局(ANSI)上没有一个键会在没有修改键的情况下产生冒号。 SDLK_COLON
存在是因为有一些键盘布局会在没有修改键的情况下产生冒号,比如法国键盘布局,其中与 SDL_SCANCODE_PERIOD
(句号 .
或大于号 >
)对应的键会产生冒号 :
或斜杠 /
(使用Shift键)。因此,如果你在法国键盘上按下该键,你将接收到一个带有 SDL_SCANCODE_PERIOD
和 SDLK_COLON
的事件。
我猜你想知道用户是否输入了一个冒号,这与扫描码或不同键盘布局的键码无关。为此,你需要使用 SDL_TextInputEvent
。请查看维基教程。
或者,你可以使用 SDL_SCANCODE_SEMICOLON
,检查该键对于用户来说对应的是什么,然后显示给用户,以便用户知道要按哪个键(对于法国键盘来说,它将是 ù
键)。
英文:
There is no colon scancode because there is no key on an ANSI (US) layout keyboard that produces a colon without modifiers. SDLK_COLON
exists because there are layouts where a key produces a colon without modifier, like the French layout where the key corresponding to SDL_SCANCODE_PERIOD
(dot .
or greater-than sign >
) makes a colon :
or a slash /
(with shift). So if you press that key on a French keyboard, you receive an event with SDL_SCANCODE_PERIOD
and SDLK_COLON
.
What I assume you want is to know if the user typed a colon, which has nothing to do with scancodes or even keycodes when dealing with different keyboard layouts. For that, you need a SDL_TextInputEvent
. Check out the wiki's tutorial about it.
Or you could use SDL_SCANCODE_SEMICOLON
, check what that key corresponds to for the user, and display that so the user knows what key to press (it would be the ù
key for a French keyboard).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论