如何在没有重复情况的情况下检测在 SDL2 中按下了哪个键?
How to detect which key was pressed in SDL2 without repetitive cases?
我需要在 SDL 中创建一个输入框 window。
由于没有相应的功能,我打算制作一个基本的输入框,但我找不到如何检测在 SDL 中按下了哪个键。
使用下面的代码,我可以在点击 'A'
时进行打印,但我认为为每个字符进行此操作会非常重复。如何检测按下了哪个键?
case: SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_a:
cout << "You Clicked \'A\'" << endl;
break;
}
SDL_Keysym::sym
is an SDL_Keycode
value. As you can see in the lookup table,这些键码尽可能对应于 ASCII 值。检查它是否在 0x20
和 0x7f
之间(含)应该是一个不错的检测方法。
您还可以使用 SDL_GetKeyName
将密钥名称作为字符串获取。
请注意,不考虑像 Shift 这样的修饰符。我认为这没关系,因为您要求检测按键,而不是键入的字符。否则,SDL_TextInputEvent
可能更接近您的需要。
我需要在 SDL 中创建一个输入框 window。
由于没有相应的功能,我打算制作一个基本的输入框,但我找不到如何检测在 SDL 中按下了哪个键。
使用下面的代码,我可以在点击 'A'
时进行打印,但我认为为每个字符进行此操作会非常重复。如何检测按下了哪个键?
case: SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_a:
cout << "You Clicked \'A\'" << endl;
break;
}
SDL_Keysym::sym
is an SDL_Keycode
value. As you can see in the lookup table,这些键码尽可能对应于 ASCII 值。检查它是否在 0x20
和 0x7f
之间(含)应该是一个不错的检测方法。
您还可以使用 SDL_GetKeyName
将密钥名称作为字符串获取。
请注意,不考虑像 Shift 这样的修饰符。我认为这没关系,因为您要求检测按键,而不是键入的字符。否则,SDL_TextInputEvent
可能更接近您的需要。