SDL2密钥重复不起作用

时间:2017-02-05 19:50:57

标签: c++ event-handling sdl sdl-2

我试图制作一个可以在射击子弹周围移动的简单角色。我的事件处理程序目前看起来像这样:

    while( SDL_PollEvent( &e ) != 0 ) {
        if( e.type == SDL_QUIT ) {
            quit = true;
        } else if (e.type == SDL_KEYDOWN && e.key.repeat == 0) {
           switch (e.key.keysym.sym) {
               case SDLK_UP:
                   p->setVelY(-1);
                   break;
               case SDLK_DOWN:
                   p->setVelY(1);
                   break;
               case SDLK_LEFT:
                   p->setVelX(-1);
                   break;
               case SDLK_RIGHT:
                   p->setVelX(1);
                   break;
               case SDLK_SPACE:
                   cout << "Firing" << endl;
                   p->Fire();
                   break;
           }
       } else if (e.type == SDL_KEYUP && e.key.repeat == 0) {
           ...

问题是,如果我拿着空格键,我只想让我的角色射一次。但是现在,它只发射一次,延迟了四分之一秒,然后迅速继续发射。根据我的理解,重复标志是避免这个问题的方法吗?但目前它还没有工作。我看到某处使用扫描码,但我仍然遇到同样的问题。我可以手动制作地图,但我想使用内置方法来避免重复重复。我目前在Ubuntu 16.04上使用SDL 2.0.5。我刚开始使用SDL,所以感谢任何帮助。

编辑:仍然无法正常工作,但我现在看到KEYUP在每次KEYDOWN后的下一帧中立即发生,但随后触发了新的KEYDOWN(我仍然按住键)等等。所以它只是继续快速做keydown和up事件。这甚至不让我自己做出关键按键/释放的映射...任何想法?

0 个答案:

没有答案