[SDL_KEYUP,当按键仍然按下时触发

问题描述 投票:1回答:1

我正在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;                    
                }
            }
        }
c++ sdl sdl-2
1个回答
1
投票

这是功能,不是错误。如果您按住某个键半秒左右,SDL将开始生成“假”键按下和键按下事件。

这主要用于文本编辑,但除此之外几乎没有用。

忽略所有具有event.key.repeat != 0的键盘事件。


此外,如果您正在编写游戏,则可能要使用扫描码而不是键码(例如event.key.keysym.scancode == SDL_SCANCODE_A而不是event.key.keysym.sym == SDLK_a

键码取决于当前的布局,而扫描码则不然。扫描码代表物理密钥位置。如果使用非QWERTY布局,则差异明显。 (例如,SDLK_z总是绑定到上面印有Z的键,而SDL_SCANCODE_W绑定到QWERTY上的W和AZERTY上的Z。)]

© www.soinside.com 2019 - 2024. All rights reserved.