在上一篇SDL2音視頻渲染入門中,咱們只是展現了一個窗口,3秒鐘後自動消失。如何讓這個窗口像其餘正常應用的窗口同樣能夠進行拖動、最小化、關閉等操做,這個時候就須要SDL的事件處理了。這裏所指的事件處理就是咱們一般所說的,鍵盤事件,鼠標事件,窗口事件等,SDL對這些事件都作了封裝,提供了統一的API。git
在SDL中,將全部的事件都存放在一個隊列中,而後經過一個循環從隊列中取出數據,進行處理,全部對事件的操做,其實就是對隊列的操做。github
將上一篇中的代碼SDL_Delay(3000); // 延時3秒
改成:bash
while (quit) {
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_QUIT://退出事件
SDL_Log("quit");
quit = 0;
break;
default:
SDL_Log("event type:%d", event.type);
}
}
複製代碼
實現一個點擊窗口「x」號關閉窗口的功能。ui
SDL_WaitEvent: 事件驅動方式,當列表中有事件存在纔會觸發處理流程,不然處於阻塞狀態,釋放 CPUspa
SDL_PollEvent: 輪訓方式,定時不斷從列表中取出數據處理(可能會致使CPU 100%)code
SDL_WaitEventTimeout: 與SDL_WaitEvent的區別時,當到達超時時間後,退出阻塞狀態。視頻
即然有 SDL_WaitEvent了,爲何還要有SDL_PollEvent呢?這主要是因爲使用的場景不一樣。
對於遊戲來講,它要求事件的實時處理,就使用SDL_PollEvent;
而對於一些其它實時性不高的狀況來講,則可使用 SDL_WaitEvent了。
複製代碼
SDL_WindowEvent : Window窗口相關的事件。隊列
SDL_KeyboardEvent : 鍵盤相關的事件。遊戲
SDL_MouseMotionEvent : 鼠標移動相關的事件。事件
SDL_QuitEvent : 退出事件。
SDL_UserEvent : 用戶自定義事件。
具體信息能夠查看SDL Wiki