C++ SDL2.0中的垃圾键盘信息

C++ SDL2.0中的垃圾键盘信息,c++,input,keyboard,sdl,C++,Input,Keyboard,Sdl,我有以下代码来测试2.0版上的SDL键盘输入: while (SDL_PollEvent(&evnt)) { if (evnt.type == SDL_KEYDOWN) { board = evnt.key; key = board.keysym.sym; switch (key) {

我有以下代码来测试2.0版上的SDL键盘输入:

while (SDL_PollEvent(&evnt))
        {
            if (evnt.type == SDL_KEYDOWN)
            {
                board = evnt.key;
                key = board.keysym.sym;

                switch (key)
                {
                    case SDLK_a:
                        printf("a key!\n");
                        break;

                    case SDLK_d:
                        printf("d key!\n");
                        break;

                    default:
                        printf("Code: 0x%X\n", board.keysym.scancode);
                        printf("Name: %s\n", SDL_GetKeyName(key));
                        printf("Hex:  0x%02X\n", key);
                        printf("Uni:  %c\n\n", (char)board.keysym.unicode);
                }
            } else if (evnt.type == SDL_QUIT)
                running = false;
        }
但是,以下是序列“qwerty”的输出:

Code: 0x460001
Name: ¶
Hex:  0x14
Uni:

Code: 0x460001
Name: →
Hex:  0x1A
Uni:

Code: 0x460001
Name: Backspace
Hex:  0x08
Uni:

Code: 0x460001
Name: §
Hex:  0x15
Uni:

Code: 0x460001
Name: ↨
Hex:  0x17
Uni:

Code: 0x460001
Name: ∟
Hex:  0x1C
Uni:
我只是在做些傻事吗

而且,对于我的程序来说,这不是一个理想的方法。我宁愿这样做 如果按['k'] { } 等等


是否有能力在SDL中执行这种形式的输入处理,或者我需要编写自己的类来管理它?

switch语句基本上只是一个if语句

如果你真的想按自己的方式去做,看起来

if (event.type == SDL_KEYDOWN)
        {
            board = evnt.key;
            key = board.keysym.sym;

            if(key==SDLK_a)
            {
                //do stuff here
            }
如果希望它看起来与上面所说的一模一样,则需要定义一个bools映射,称为isPressed,并且每当您获得一个键事件时,将其传递给一个助手,该助手将根据按下的键设置映射中的值。我现在告诉你-习惯SDL“希望”你这样做的方式。当你对它感到更舒服时,你会意识到它更有意义


至于您正在经历的bug,我不太确定其中的一部分,但是尝试将SDL_启用Unicode;在你的初始阶段。然后对相同的输入进行测试并报告-我希望这至少可以解决unicode问题。

switch语句基本上只是一个if语句

如果你真的想按自己的方式去做,看起来

if (event.type == SDL_KEYDOWN)
        {
            board = evnt.key;
            key = board.keysym.sym;

            if(key==SDLK_a)
            {
                //do stuff here
            }
如果希望它看起来与上面所说的一模一样,则需要定义一个bools映射,称为isPressed,并且每当您获得一个键事件时,将其传递给一个助手,该助手将根据按下的键设置映射中的值。我现在告诉你-习惯SDL“希望”你这样做的方式。当你对它感到更舒服时,你会意识到它更有意义


至于您正在经历的bug,我不太确定其中的一部分,但是尝试将SDL_启用Unicode;在你的初始阶段。然后在相同的输入上进行测试并报告-我希望这至少能解决您的unicode问题。

在运行圆圈并在键盘上敲击头部足够长的时间后,我最终检查了代码并自己构建了sdl。我构建的版本按预期工作。想想看,你的二进制文件是从哪里来的?我没有在上看到任何2.0二进制文件。一位绅士在论坛上发布了他在其网站上的最新版本。我现在记不起它的名字了。在绕圈子和用键盘敲击脑袋足够长的时间后,我最终检查了代码并自己构建了sdl。我构建的版本按预期工作。想想看,你的二进制文件是从哪里来的?我没有在上看到任何2.0二进制文件。一位绅士在论坛上发布了他在其网站上的最新版本。我现在记不起这个名字了。