2015-06-11 31 views
0

我正在使用C與gcc編譯器混淆SDL2。我已經設法在2秒後自動加載和關閉圖像,但現在我要等到用戶按下頂部的X按鈕或用戶按下按鍵。SDL_PollEvent()循環未執行。沒有事件正在排隊?

但是,幾次打印聲明顯示一切正常後,但我的SDL_PollEvent()循環,我想知道是否有任何事件正在排隊。當我運行我的程序時,我的圖像顯示在屏幕上,程序等待我的輸入。我瘋狂地砸碎鍵盤上的任何按鍵以獲得響應,但沒有任何反應。應該發生什麼是一條消息,說「你按了一些東西!」

然後我嘗試點擊窗口頂部的X,但沒有任何反應。我可以退出程序的唯一方法是如果我在終端中按下CTRL + C,請按

這裏是事件循環一塊我的代碼:

/* Handle events on queue */ 
while(SDL_PollEvent(&e) != 0) 
{ 
    /* This print statement does not execute */ 
    printf("Handling events!\n"); 

    /* User quits */ 
    switch(e.type) 
    { 
     case SDL_KEYDOWN: 
      switch(e.key.keysym.sym) 
      { 
       case SDLK_ESCAPE: 
        printf("Escape pressed!\n"); 
        quit = true; 
        break; 

       default: printf("You pressed something!"); 
      } 

     case SDL_QUIT: 
      quit = true; 
      break; 

     default: printf("Print anything!\n"); 
    } 
} 
+1

您是初始化事件子系統還是使用多個線程? –

回答

0

我很欣賞迄今爲止的建議,但沒有任何工作的真正原因是因爲我的清理功能被稱爲close()。我最終將其更改爲任意名稱,並解決了我的問題!

1

確保您呼叫的遊戲循環內的SDL_PollEvent循環。 SDL_PollEvent不會阻塞等待事件,所以您需要每幀都要繼續調用它,直到有一些事件要處理。

除此之外,你的代碼看起來很好。