SDL_KEYDOWN触发两次
SDL_KEYDOWN triggering twice
我正在关注 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
TL;DR: 在处理事件之前检查 e.key.repeat
是否等于 0
。
如果您按住某个键的时间足够长,SDL 会生成伪造的重复按键。这主要用于文本输入。
原装按键有.repeat == 0
,假按键有.repeat == 1
.
可能出于方便的原因(我认为这很不方便),since SDL 2.0.5实际的按键操作会生成两个事件而不是一个。一个 .repeat
设置为 0
,另一个(新)设置为 1
。
我正在关注 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
TL;DR: 在处理事件之前检查 e.key.repeat
是否等于 0
。
如果您按住某个键的时间足够长,SDL 会生成伪造的重复按键。这主要用于文本输入。
原装按键有.repeat == 0
,假按键有.repeat == 1
.
可能出于方便的原因(我认为这很不方便),since SDL 2.0.5实际的按键操作会生成两个事件而不是一个。一个 .repeat
设置为 0
,另一个(新)设置为 1
。