English 中文(简体)
SDL事件KEYDOWN行为问题
原标题:
  • 时间:2008-11-29 12:08:12
  •  标签:

这是问题,我已经编写了一个事件循环来检测按键和松开键的事件。我遇到的问题是,当按键被按下并保持按下时,一个按键按下事件会生成一个按键按下和一个按键松开事件。我正在使用箭头键移动一个对象,然后在释放按键(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
";
                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
";
                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_EnableKeyRepeat(0, 0);

你可能想要使用SDL_GetKeyState来代替跟踪键按下/释放;我使用它来检测键的瞬时状态,你可以用它来确定键是否在连续的帧中保持按下状态。





相关问题
热门标签