SDL 2.0密钥重复和延迟

KVA*_*ASS 3 c++ keyboard-events sdl-2

我在乒乓球游戏中遇到SDL 2.0键盘输入问题.当我按左箭头命令向左移动时,它由SDL_PollEvents()处理,如果按下键一次,则响应正确.但是,如果我按下按键,我会在连续移动之前得到短暂的延迟(只要Windows键重复延迟).

这是函数处理事件:

void Event::PlayerEvent (Player &player)
{
    while (SDL_PollEvent (&mainEvent))
    {
        switch (mainEvent.type)
        {
            case SDL_KEYDOWN :
                switch (mainEvent.key.keysym.sym)
                {
                    case SDLK_ESCAPE :
                        gameRunning = false;
                        break;
                    case SDLK_LEFT :
                        player.moving = player.left;
                        break;
                    case SDLK_RIGHT :
                        player.moving = player.right;
                }
                break;
            case SDL_QUIT :
                gameRunning = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:毕竟,我设法通过在程序开始时调用SystemParametersInfo(SPI_SETKEYBOARDDELAY,0,0,0)和最后调用SystemParametersInfo(SPI_SETKEYBOARDDELAY,1,0,0)来修复此问题,以返回到标准键重复延迟.

Jon*_*y D 6

对于游戏移动,您通常不会使用事件,而是使用状态.

尝试在事件循环之外使用SDL_GetKeyboardState():

const Uint8* keystates = SDL_GetKeyboardState(NULL);

...

if(keystates[SDL_SCANCODE_LEFT])
    player.moving = player.left;
else if(keystates[SDL_SCANCODE_RIGHT])
    player.moving = player.right;
Run Code Online (Sandbox Code Playgroud)