我正在遵循lazy foo的教程,但是我意识到每次按下presss或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");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
按s一次:
start
stop
Run Code Online (Sandbox Code Playgroud)
TL;DR:在处理事件之前检查是否e.key.repeat等于。0
如果您按住某个键的时间足够长,SDL 会生成假的重复按键。这主要用于文本输入。
原装按键有.repeat == 0,假按键有.repeat == 1。
可能是出于方便的原因(我认为这相当不方便),因为 SDL 2.0.5实际按键会生成两个事件而不是一个。一个已.repeat设置为0,另一个(新)已设置为1。