在SDL中打印密钥的名称

时间:2014-11-18 09:00:50

标签: c++ sdl

我的SDL程序正在返回一个对所有密钥都相同的存储器地址,我试图打印密钥的名称,即如果用户按下' F' F' F' F'关键控制台输出' F'。我将如何编辑我的代码来实现这一目标?

void Game::handleEvents()
    {
        SDL_Event event;
        if(SDL_PollEvent(&event))
        {
            switch (event.type) {
                case SDL_QUIT:
                    g_bRunning = false;
                    //SDL_Quit();
                    break;
                case SDL_KEYDOWN:
                    //this is the line that is not working as expected.
                    std::cout << &event.key.keysym.sym << std::endl;
                default:
                    break;
            }
        }
    }

3 个答案:

答案 0 :(得分:3)

使用SDL_GetKeyName()获取表示按下的键的可打印字符串。由于SDL_Keycode(SDL1.2中的SDLKey)是作为枚举实现的,因此不能简单地将其转换为可打印字符,特别是对于“shift”和“alt”这样的键。

试试这个:

std::cout << SDL_GetKeyName(event.key.keysym.sym) << std::endl;

答案 1 :(得分:2)

&中的std::cout << &event.key.keysym.sym << std::endl;是不必要的。这是打印地址而不是实际数据的原因。

然而,即使删除&,这也不会为f keypressed输出'f',因为value是整数枚举,而不是ASCII代码值。

答案 2 :(得分:1)

f的键码是SDLK_f

一个简单的if语句应该这样做:

case SDL_KEYDOWN:
    if( event.key.keysym.sym == SDLK_f )
        std::cout << "f was pressed" << std::endl;
    break ;   //this was missing 

SDL不区分案件,因此如果按下班次等,您需要额外检查。