2017-06-20 2 views
1

Je suis lazy foo's tutorial, mais je me suis rendu compte chaque fois que j'appuie sur s ou p, SDL_KEYDOWN deux fois. Comment cela peut-il être réparé?SDL_KEYDOWN déclenchement deux fois

Voici l'extrait de code:

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"); 
      } 
     } 
    } 
} 

En appuyant sur s fois:

start 
stop 

Répondre

2

TL; DR: Vérifiez si e.key.repeat égal à 0 avant de manipuler les événements. SDL génère de fausses pressions de touches répétées si vous maintenez une touche assez longtemps. Ceci est principalement utilisé pour la saisie de texte.

La touche originale a .repeat == 0 et les fausses presses .repeat == 1.

Pour des raisons de commodité probablement (je dirais que c'est plutôt incommode), since SDL 2.0.5 la pression réelle de la touche génère deux événements au lieu d'un. On a .repeat mis à 0, et l'autre (nouveau) l'a mis à 1.