Это особенность, а не ошибка. Если вы удерживаете клавишу в течение полсекунды или около того, SDL начнет генерировать «поддельные» события нажатия клавиш и нажатия клавиш.
Это используется в основном для редактирования текста, но в большинстве случаев бесполезно.
Игнорировать все события клавиатуры, которые имеют event.key.repeat != 0
.
Кроме того, если вы пишете игру, вы можете использовать коды сканирования вместо кодов клавиш (например, event.key.keysym.scancode == SDL_SCANCODE_A
вместо event.key.keysym.sym == SDLK_a
).
Коды клавиш зависят от текущего макета, а коды сканирования - нет. Скан-коды представляют физические ключевые местоположения. Разница заметна, если вы используете макет не-QWERTY. (Например, SDLK_z
всегда связан с ключом, на котором напечатано Z
, в то время как SDL_SCANCODE_W
связан с W
в QWERTY и Z
в AZERTY.)