SDL键盘异常行为

问题描述

只有功能键被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数组。