2012-07-29 50 views
1
int main(int argc, char* args[]) 
{ 
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) 
     std::cout<<"unable to init sdl"; 
    SDL_Surface *screen = SDL_SetVideoMode(800,600,32,SDL_DOUBLEBUF); 
    std::cout<<"before while\n"; 
    SDL_Event event; 
    while(SDL_PollEvent(&event)) 
     { 
      std::cout<<"in while\n"; 
      if(event.type == SDL_QUIT) 
       std::cout<<"SDL_QUIT\n"; 
     } 
    std::cout<<"after while\n"; 
    SDL_Quit(); 
} 

戒菸對於一些未知的原因在while循環運行4次,沒有我殺死/關閉/等之後,並沒有打印「SDL_QUIT」到stdout這個SDL應用程序退出。 這是有原因嗎?我如何解決它?SDL應用在事件循環

回答

4

您需要通過爲其創建主循環來保持應用程序的活動狀態。截至目前,您的應用程序只是退出您輪詢所有的初始事件之後:當有沒有更多的事件來處理,這是之後在這種情況下,應用程序啓動

int main(int argc, char* args[]) 
{ 
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) 
     std::cout<<"unable to init sdl"; 
    SDL_Surface *screen = SDL_SetVideoMode(800,600,32,SDL_DOUBLEBUF); 
    SDL_Event event; 
    bool active = true; 
    while(active) 
    { 
     while(SDL_PollEvent(&event)) 
     { 
      if(event.type == SDL_QUIT) 
      { 
       std::cout<<"SDL_QUIT\n"; 
       active = false; 
      } 
     } 
     // TODO: add drawing to screen 
     SDL_Flip(screen); 
    } 
    SDL_Quit(); 
} 
+0

工作,TY。我會在8分鐘內接受 – user1233963 2012-07-29 13:55:35

4

SDL_PollEvent將返回false。

您需要嵌套投票循環的另一個循環,保持應用程序活着裏面:

int running = 1; 
while (running) 
{ 
    while (SDL_PollEvent(&event)) 
    { 
     if (event.type == SDL_QUIT) 
      running = 0; 
    } 
    // Update and draw here usually 
}