SDL_event KEYDOWN行为问题

时间:2008-11-29 12:08:12

标签: c++ sdl

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

贾斯汀

P.S。我会发布代码,但我不能让它看起来正确。

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 个答案:

答案 0 :(得分:3)

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

SDL_EnableKeyRepeat(0, 0);

答案 1 :(得分:3)

您可能希望使用SDL_GetKeyState而不是跟踪keydown / keyup;我用它来检测键的即时状态,你可以用它来确定是否在连续的帧上按下键。