问题描述
只有功能键被SDL_KEYDOWN捕获并且可以正常打印,正常的字母和数字有时会被SDL_TEXTINPUT捕获(不可预知),但是当我尝试打印它们时,我什么也没有得到,或者像“Æëçó”之类的东西得到了,这就是键剂量不要被if语句抓住。有人有同样的问题吗?
这是在win 10 Visual Studio 19上实现的,在屏幕键盘上使用时,我得到相同的结果。
switch (g_event->type)
{
case SDL_KEYDOWN: //here only ctrl,alt,caps get caught
std::cout << SDL_GetKeyName(g_event->key.keysym.sym); //this prints out the names correctly
break;
case SDL_TEXTINPUT: //here normal keys get caught sometimes(letters,numbers...)
std::cout << SDL_GetKeyName(g_event->key.keysym.sym); //this prints out things like this "ⁿÆëçó" or nothing at all
if(g_event->key.keysym.sym==SDLK_f) //the key isn't caught no matter what
{std::cout<<"f";}
break;
}
解决方法
您不会在SDL_TEXTINPUT事件中访问g_event.key.keysym.sym。 它为您提供了一个g_event.text.text参数,您在其中将输入的文本作为char数组。