代码之家  ›  专栏  ›  技术社区  ›  Justin

sdl_事件键控行为问题

  •  3
  • Justin  · 技术社区  · 16 年前

    问题是,我编写了一个事件循环来检测keydown和keyup事件。我遇到的问题是,当按下并按住键时,key down事件生成keydown和keydup事件。我使用箭头键移动一个对象,然后在释放该键时停止移动(keyup)。任何帮助都会有帮助的。谢谢。=)

    贾斯廷

    我会张贴代码,但我不能让它看起来正确。

    print("         SDL_Event event;
        SDL_EnableKeyRepeat(0,0);
        while(SDL_PollEvent(&event)){
            switch(event.type){
            case SDL_QUIT:
                done = true;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym){
                case SDLK_ESCAPE:
                    done = true;
                    break;
                case SDLK_LEFT:
                    animate_x = -5;
                    cout << "left press\n";
                    break;
                case SDLK_RIGHT:
                    animate_x = 5;
                    break;
                case SDLK_UP:
                    animate_y = -5;
                    break;
                case SDLK_DOWN:
                    animate_y = 5;
                    break;
                default:
                    break;
                }
                break; -left out in original
            case SDL_KEYUP:
                switch(event.key.keysym.sym){
                case SDLK_LEFT:
                    cout << "left up\n";
                    animate_x = 0;
                    break;
                case SDLK_RIGHT:
                    animate_x = 0;
                    break;
                case SDLK_UP:
                    animate_y = 0;
                    break;
                case SDLK_DOWN:
                    animate_y = 0;
                    break;
                default:
                    break;
                }
                break; -left out in original
            }
        }");
    

    在试图找出如何发布代码时,我注意到在其中两种情况下我遗漏了一个默认值。代码现在可以工作了。它一直在执行案例,并执行与队列中的代码匹配的代码。愚蠢的我。谢谢你的帮助。=)

    2 回复  |  直到 16 年前
        1
  •  3
  •   Joh    16 年前

    你好像启用了重复键。要禁用它,请使用

    SDL_EnableKeyRepeat(0, 0);
    
        2
  •  3
  •   user42056    16 年前

    你可能想用 SDL_GetKeyState 而不是跟踪键按下/键升;我用它来检测键的即时状态,您可以用来判断键是否在连续帧上被按下。