2008-11-29 4 views
3

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

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 
     } 
    }"); 

При попытке выяснить, как отправить код, я заметил, что в двух случаях я отказался от дефолта. Код теперь работает. Он продолжал просматривать дела и выполнял код, который соответствовал тому, что было в очереди. Дурак я. Спасибо за помощь. =)

+0

если keydown отправляет оба события. если keyup отправляет только событие keyup. не можете ли вы перестать двигаться, когда есть больше событий, связанных с клавиатурой, чем события смены ключа? – 2008-11-29 12:45:49

+0

Нам нужен код, я думаю. Постарайтесь опубликовать то, что у вас есть, и мы рассмотрим, как это выглядит. – 2008-11-30 01:14:35

ответ

3

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

SDL_EnableKeyRepeat(0, 0); 
3

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

Смежные вопросы