我正在关注lazy foo's tutorial,但每次按下s
或p
,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
答案 0 :(得分:2)
TL; DR:在处理事件之前,检查e.key.repeat
是否等于0
。
如果您持有足够长的钥匙,SDL会生成假的重复按键。这主要用于文本输入。
原始按键有.repeat == 0
,虚假按键有.repeat == 1
。
为了方便起见,可能(我认为它相当不方便),since SDL 2.0.5实际按键生成两个事件而不是一个。其中一个.repeat
设置为0
,其他(新)一个设置为1
。