SDL_event KEYDOWN проблема поведения - PullRequest
3 голосов
/ 29 ноября 2008

Вот проблема, я написал цикл обработки событий для обнаружения событий нажатия клавиш и нажатия клавиш. Проблема, с которой я сталкиваюсь, состоит в том, что событие нажатия клавиши генерирует нажатие клавиши и событие нажатия клавиши, когда клавиша нажимается и удерживается. Я использую клавиши со стрелками для перемещения объекта, а затем, чтобы остановить движение, когда клавиша отпущена (keyup). Любая помощь поможет. Благодарю. =) * * Тысяча одна

Justin

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 ]

3 голосов
/ 01 декабря 2008

Возможно, вы захотите использовать SDL_GetKeyState вместо отслеживания нажатия клавиш / keyup; Я использую его для определения мгновенного состояния клавиш, которое можно использовать для определения того, удерживаются ли клавиши в последовательных кадрах.

3 голосов
/ 30 ноября 2008

Похоже, у вас включена функция повтора клавиш. Чтобы отключить его, используйте

SDL_EnableKeyRepeat(0, 0);
...