Diaz
Diaz

Reputation: 987

How to disable key repeat in SDL2?

There used to be a function named SDL_EnableKeyRepeat() in SDL, but not anymore in SDL2.

I searched around in SDL2-wiki but failed to locate anything relevant.

Any ideas?

Upvotes: 23

Views: 20904

Answers (3)

joshbodily
joshbodily

Reputation: 1093

When handling a keyboard event, just filter out any events that are repeat events, i.e. check the repeat field of the SDL_KeyboardEvent of the SDL_Event union.

For example:

SDL_Event event;
while (SDL_PollEvent(&event)) {
  if (event.type == SDL_QUIT) {
    quit = true;
  }
  if (event.type == SDL_KEYDOWN && event.key.repeat == 0) {
    if (event.key.keysym.sym == SDLK_d)
      debug = debug ? false : true;
    // ... handle other keys
  }
}

See https://wiki.libsdl.org/SDL_KeyboardEvent

Upvotes: 43

joeforker
joeforker

Reputation: 41797

You may be better served by the SDL_GetKeyboardState function which tells you all the keys that are pressed. You can also just check the repeat flag in the event and ignore when repeat is true.

Upvotes: 6

jordsti
jordsti

Reputation: 756

You can do it yourself, by adding your "down" key into a list and removing them when you catch a KEY_UP and at each frames you can iterate your list to know which key is still down.

Upvotes: 1

Related Questions