2012-10-18 86 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