2017-06-20 16 views
1

私はlazy foo's tutorialに従っていますが、sまたはpSDL_KEYDOWNが2回トリガーされるたびに気付きました。どのようにこれを修正することができますか?SDL_KEYDOWNが2回トリガーする

while(SDL_PollEvent(&e) != 0) { 
    if(e.type == SDL_QUIT) { 
     quit = true; 
    } 
    else if(e.type == SDL_KEYDOWN) { 
     if(e.key.keysym.sym == SDLK_s) { 
      if(timer.isStarted()) { 
       timer.stop(); 
       printf("stop\n"); 
      } 
      else { 
       timer.start(); 
       printf("start\n"); 
      } 
     } 
     else if(e.key.keysym.sym == SDLK_p) { 
      if(timer.isPaused()) { 
       timer.unpause(); 
       printf("unpause\n"); 
      } 
      else { 
       timer.pause(); 
       printf("pause\n"); 
      } 
     } 
    } 
} 

は一度sを押す:ここ

は、コードスニペットで

start 
stop 

答えて

2

TL; DR:e.key.repeatがイベントを処理する前に0に等しい確認してください。


SDLは、キーを長押しすると偽の繰り返しキーを生成します。これは主にテキスト入力に使用されます。

元のキープレスは.repeat == 0、偽のプレスは.repeat == 1です。

便宜上(おそらく私はそれがむしろ不便だと主張しています)、since SDL 2.0.5実際のキーを押すと、1つではなく2つのイベントが生成されます。 1つは.repeat0に設定され、他の(新しい)ものは1に設定されています。

関連する問題