C++ 事件键控行为问题

C++ 事件键控行为问题,c++,sdl,C++,Sdl,问题是,我编写了一个事件循环来检测keydown和keydup事件。我遇到的问题是,当按下并按住键时,keydown事件会生成keydown和keydup事件。我使用箭头键移动对象,然后在释放键(keyup)时停止移动。任何帮助都会有帮助。谢谢 贾斯汀 另外,我会发布代码,但我不能让它看起来正确 print(" SDL_Event event; SDL_EnableKeyRepeat(0,0); while(SDL_PollEvent(&event)){

问题是,我编写了一个事件循环来检测keydown和keydup事件。我遇到的问题是,当按下并按住键时,keydown事件会生成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
        }
    }");
打印(“SDL_事件;
SDL_EnableKeyRepeat(0,0);
while(SDL_事件和事件)){
开关(事件类型){
案例SDL_退出:
完成=正确;
打破
案例SDL_按键关闭:
开关(event.key.keysym.sym){
案例SDLK_逃生:
完成=正确;
打破
案例SDLK_左:
动画_x=-5;

cout看起来您启用了密钥重复。要禁用它,请使用

SDL_EnableKeyRepeat(0, 0);

您可能希望使用
SDL\u GetKeyState
而不是跟踪keydown/keyup;我使用它来检测关键点的即时状态,您可以使用它来确定关键点是否在连续帧上被按住。

如果keydown发送两个事件。如果keyup只发送一个keyup事件。当有更多keyup事件时,您不能停止移动吗我们需要一些代码,我想。试着发布你所拥有的,我们会处理它的外观。谢谢各位。这是switch语句的问题。在我的情况下,这不起作用,因为问题是switch语句。我的代码在那里显示它,但如果你注释掉它,它不会影响任何东西。谢谢你的建议这让我对这个问题有了不同的看法