What is the best way to read input from keyboard using SDL?

Viewed 26342

I'm running an update() method n times per second to "update" the keyboard input from the user so I can read it later in the logic part of the program. So I find two ways of implementing this in the SDL Docs and I'm not sure which one should I use.

1; Loop for all events using SDL_PollEvent searching for key down/up events and saving the key states in a map so I can check for each key state in the logic of the program.

Note: Alternatively, I can also use SDL_PeepEvents instead of SDL_PollEvent to take only the event types that matter; so, it would not "thrown away" the events on the queue.

std::map<int, bool> keyboard; // Saves the state(true=pressed; false=released) of each SDL_Key.
    
void update()
{
    SDL_Event event;
    while(SDL_PollEvent(&event))
    {
        switch(event.type)
        {
            case SDL_KEYDOWN:
                keyboard[event.key.keysym.sym] = false;
                break;
            case SDL_KEYUP:
                keyboard[event.key.keysym.sym] = true;
                break;
        }
    }
}

2; Taking a snapshot from the keyboard each frame so I can read it easily.

Uint8* keyboard;
    
void update()
{
    SDL_PumpEvents();
    keyboard = SDL_GetKeyState(NULL);
}

With any of above implementations I can read keyboard just like this:

if (key_map[SDLK_Return]) printf("Return has been pressed.");

Also, is there another way to do so?

3 Answers
Related