2017-06-20 86 views
1

我正在关注lazy foo's tutorial,但是我意识到每当我按下sp时,SDL_KEYDOWN触发两次。这怎么解决?SDL_KEYDOWN触发两次

这里是代码片段:

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实际的按键生成两个事件,而不是一个。其中一个将.repeat设置为0,其他(新)已将其设置为1