2012-10-18 2 views
2

C++에서 SDL의 F1 키 이벤트를 잡으려고합니다. 그러나 어떻게 든 F1 키를 누른 후에는 변경 사항을 볼 수 없습니다. 그러나 화면에서 애니메이션 객체를 전환 할 때 SDL_t를 사용하면 잘 실행됩니다. F1 키를 사용하지 않는 이유는 무엇입니까? 다음은 키를 눌러 이벤트를 처리하기위한 스위치 케이스입니다 :SDLK_F1 키 케이스가 작동하지 않습니다.

SDL_Event event; 

    bool done = false; 
    bool keyPress = false; 
    while (not done) { 
    draw(); 
    SDL_Flip(screen); 

    SDL_PollEvent(&event); 
    if (event.type == SDL_QUIT) { break; } 
    if(event.type == SDL_KEYUP) { keyCatch = false; } 
    if(event.type == SDL_KEYDOWN) { 
     switch (event.key.keysym.sym) { 
     case SDLK_ESCAPE : done = true; break; 
     case SDLK_q  : done = true; break; 
     case SDLK_F1  : { 
    if(!keyCatch){ 
       keyPress=true; 
        //this method is from another class. 
        io.printMessageAt("F1 is selected:",50,10);  
       currentOrb = (currentOrb+1) % orbs.size(); 
         } 
     break; 
     } 
     case SDLK_t : case SDLK_SPACE : 
      if (!keyPress) { 
      //something 
      } 
      break; 
     case SDLK_p  : { 
      if (!keyPress) { 
      keyPress = true; 
      //something 
      } 
      break; 
     } 
     default   : break; 
     } 
    } 
    } 

참고 : 나는 위의 전체 코드 나가요을주고 내가 뭘하려고 오전 내 일부 수 없습니다.

+0

왜 각 프레임에 * 단일 * 이벤트 만 가져 오는 중입니까? – genpfault

답변

1

프로세스에 충돌하기 전에 창 관리자 나 단축키 데몬이 F1을 사용하고 있지 않은지 다시 확인하십시오.

이 내 시스템에 (F1 프로그램을 닫습니다) 잘 작동 :

#include <SDL.h> 

int main(int, char**) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_ANYFORMAT); 

    SDL_Event event; 

    bool done = false; 
    bool keyPress = false; 
    while (!done) 
    { 
     SDL_Flip(screen); 

     SDL_PollEvent(&event); 
     if(event.type == SDL_QUIT) 
     { 
      break; 
     } 
     if(event.type == SDL_KEYUP) 
     { 
      keyPress = false; 
     } 
     if(event.type == SDL_KEYDOWN) 
     { 
      switch (event.key.keysym.sym) 
      { 
      case SDLK_ESCAPE: 
      case SDLK_q: 
       done = true; 
       break; 
      case SDLK_F1: 
       if(!keyPress) 
       { 
        keyPress=true; 
        done = true; 
       } 
       break; 
      case SDLK_t: 
      case SDLK_SPACE: 
       if (!keyPress) 
       { 
        //something 
       } 
       break; 
      case SDLK_p: 
       if (!keyPress) 
       { 
        keyPress = true; 
        //something 
       } 
       break; 
      default: 
       break; 
      } 
     } 
    } 

    SDL_Quit(); 
    return 0; 
} 

내가 keyCatch가 정의되지 않은 것을 통보했다. 나는 keyPress으로 바꿨다.

+0

안녕하세요 gt 문제가 방금 깃발을 사용하여 해결, 실제로 다른 문제가 너무 작은,하지만 어쨌든 감사합니다. – pascal

관련 문제