SDL_KEYDOWN无效,代码为771

时间:2017-07-10 01:39:40

标签: c++ sdl

这是我的代码:

void MainGame::ProcessInput()
    {SDL_Event Evnt;
    while (SDL_PollEvent(&Evnt));
        {switch(Evnt.type)
            {case SDL_QUIT:         {_GameState = GameState::EXIT;}
            break;
            case SDL_MOUSEMOTION:   {}
            break;
            case SDL_KEYDOWN:       {_InputManager.PressedKey(Evnt.key.keysym.scancode);}
            break;
            case SDL_KEYUP:         {_InputManager.ReleasedKey(Evnt.key.keysym.scancode);}
            break;
            case 771:               {std::cout << "Info1 = " << Evnt.key.keysym.scancode << std::endl;
                                    _InputManager.PressedKey(Evnt.key.keysym.scancode); }
            break;
            }
        }
    }

所以在这段代码中,如果我向上,向下,向左和向右箭头,KEYDOWN正常工作。如果我点击键盘上的任何字母,它只返回代码771.在这里,我在我的开关中进行了测试,包括771。当我点击字母时,它会转到771并打印一个像30445778这样的愚蠢数字。每次重新运行程序时,这个数字都会改变。男人在这里发生了什么?!?请帮帮我

1 个答案:

答案 0 :(得分:0)

您遇到的问题是在if current == "/": raise Exception ("Module folder not found") 条件之后额外;。引用SDL wiki,您的代码应按如下方式编写:

while

请注意while (1) { SDL_Event event; while (SDL_PollEvent(&event)) { /* handle your event here */ } /* do some other stuff here -- draw your app, etc. */ } 之后没有分号。

但是,尽管您编写的代码没有按照您的意愿执行,但从C ++的角度来看仍然是正确的。

这一行:

while

将进入一个循环,该循环将迭代直到while (SDL_PollEvent(&Evnt)); 点返回SDL_PollEvent,而什么都不做。

之后,您的0语句将只运行一次,处理上次轮询的事件(忽略其类型)。与此同时,您的switch语句尚未准备好处理大多数事件类型。