web-dev-qa-db-ja.com

SDL2でキーリピートを無効にする方法は?

以前はSDLにSDL_EnableKeyRepeat()という名前の関数がありましたが、SDL2にはもうありません。

SDL2-wikiで検索しましたが、関連するものが見つかりませんでした。

何か案は?

15
Diaz

キーボードイベントを処理するときは、繰り返しイベントであるイベントをすべて除外します。つまり、SDL_KeyboardEventユニオンのSDL_Eventrepeatフィールドを確認します。

例えば:

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
  }
}

https://wiki.libsdl.org/SDL_KeyboardEvent を参照してください

28
joshbodily

押されたすべてのキーを通知する SDL_GetKeyboardState 関数を使用した方がよい場合があります。イベントのrepeatフラグをチェックして、繰り返しがtrueの場合は無視することもできます。

2
joeforker

「下」キーをリストに追加し、KEY_UPをキャッチしたときにそれらを削除することで、自分でそれを行うことができます。各フレームでリストを繰り返して、どのキーがまだ下にあるかを知ることができます。

1
jordsti