SDL中打印键名

4
我的SDL程序返回的内存地址对于所有键都是相同的,我试图打印键的名称,例如如果用户按下“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个回答

5
使用SDL_GetKeyName()函数获取表示按下的键的可打印字符串。由于SDL_Keycode (在SDL1.2中为SDLKey)是作为枚举实现的,因此它不能简单地转换为可打印字符,特别是对于像“shift”和“alt”这样的键。
尝试一下:
std::cout << SDL_GetKeyName(event.key.keysym.sym) << std::endl;

2

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不区分大小写,因此您需要进行额外的检查,以确定是否按下了Shift等键。


1
工作了,谢谢。不过我还需要等6分钟才能接受你的答案!:'( - WilsonKoder111

2
std::cout << &event.key.keysym.sym << std::endl;中的&是不必要的。这就是打印地址而不是实际数据的原因。
然而,即使移除了&,这也不会输出'f',因为值是整数枚举,而不是ASCII代码值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接