gpt4 book ai didi

c++ - SDL_KEYDOWN 触发两次

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:53 27 4
gpt4 key购买 nike

我正在关注 lazy foo's tutorial ,但是我意识到每次按下 sp 时,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

关于c++ - SDL_KEYDOWN 触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com