我在C++中使用SDL2创建精灵。但是,当我按下该键时,SDL_KEYUP会不断触发。
void update() override {
if(Game::event.type == SDL_KEYDOWN) {
switch(Game::event.key.keysym.sym) {
case SDLK_z:
cout << "key down" << endl;
break;
default:
break;
}
}
if(Game::event.type == SDL_KEYUP) {
switch(Game::event.key.keysym.sym) {
case SDLK_z:
cout << "Key up" << endl;
break;
default:
break;
}
}
}
最佳答案
这是一个功能,而不是错误。如果您按住某个键半秒左右,SDL将开始生成“假”键按下和键按下事件。
这主要用于文本编辑,但除此之外几乎没有用。
忽略所有具有event.key.repeat != 0
的键盘事件。
另外,如果您在编写游戏,则可能要使用扫描码而不是键码(例如event.key.keysym.scancode == SDL_SCANCODE_A
而不是event.key.keysym.sym == SDLK_a
)。
键码取决于当前的布局,而扫描码则不然。扫描码代表物理密钥位置。如果使用非QWERTY布局,则差异明显。 (例如SDLK_z
始终绑定(bind)到上面印有Z
的键,而SDL_SCANCODE_W
绑定(bind)到QWERTY上的W
和AZERTY上的Z
。)
关于c++ - 当按键仍然按下时触发SDL_KEYUP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59725849/