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