用SDL创建一个窗口
原文來自:http://www.aaroncox.net/tutorials/2dtutorials/sdlwindow.html
注意:這里我們想當然你已經知道怎么在你的IDE集成開發環境里配置好SDL
?
創建一個窗口
?
要用SDL創建一個窗口,設計到以下步驟:
◆初始化SDL視頻庫
◆創建窗口
◆設置窗口標題
◆關閉SDL
?
1.初始化SDL視頻庫
我們用SDL_Init()來初始化SDL視頻庫,并傳入一個參數?SDL_INIT_VIDEO.
?
2.創建一個窗口
我們用SDL_SetVideoMode()來創建一個窗口,這個函數包含四個參數,依次是窗口的寬度、高度、單個像素占用位數和一個
標記變量。其中第三個參數最為簡單的方法是設置為0,這樣它就為當前默認的顯示設置)。最后一個參數這里我們用
SDL_HWSURFACE和SDL_DOUBLEBUF.聯起來使用要用或操作符: SDL_HWSURFACE | SDL_DOUBLEBUF。
SDL_SetVideoMode()函數不僅僅是創建了一個窗口,它還創建了一塊內存區域叫"screen buffer",用來顯示圖像。這塊區
域負責顯示畫面到屏幕,標記變量SDL_HWSURFACE表示在顯存里頭創建緩存;SDL_DOUBLEBUF表示我要創建兩個緩存區域,一
個用作前端緩存,這里存放的就是我們正在顯示到屏幕的內容;另一個用作后端緩存,這里存放的是我們將要顯示到屏幕上
的內容。當我們顯示將要顯示的內容時候,只需要交換前端緩存和后端緩存,這樣后端緩存的內容就被顯示出來。(譯者注
:也就是說前端緩存又變成了后端緩存,可以用來存放下一幅要顯示的畫面)這項技術叫做雙緩存,用來加速圖像的渲染過
程。
?
SDL_SetVideoMode()函數會返回一個指向SDL_Surface類型的screen buffer。SDL_Surface結構代表了一塊內存區域,在那
里存放了圖像的信息。當我們畫圖時,只需要將圖像數據信息放到這個結構里面。
?
3.設置窗口標題
我們可以用SDL_WM_SetCaption()來設置窗口的標題,它有兩個參數,第一個參數就是標題的內容,第二個參數用來指定一
個自定義的圖標,設置為0表示使用默認的圖標。
?
4.關閉SDL
我們呼叫SDL_Quit()函數來關閉SDL。它會釋放前面通過SDL_SetVideoMode()返回的SDL_Surface類型的screen buffer。
?
?
下面的代碼創建了一個窗口,當你運行的時候,會發現顯示片刻之后,它會關閉。因為我們在創建該窗口之后,緊接著調用
了SDL_Quit()。下一階段,我們會用到一個循環,讓窗口停在那里,知道你點擊關閉。
?
#include?"SDL.h"?
const?int?WINDOW_WIDTH?=?640;
const?int?WINDOW_HEIGHT?=?480;
const?char*?WINDOW_TITLE?=?"SDL?Start";
?
int?main(int?argc,?char?**argv)
{
???SDL_Init(?SDL_INIT_VIDEO?);
?
???SDL_Surface*?screen?=?SDL_SetVideoMode(?WINDOW_WIDTH,?WINDOW_HEIGHT,?0,
??????SDL_HWSURFACE?|?SDL_DOUBLEBUF?);
???SDL_WM_SetCaption(?WINDOW_TITLE,?0?);
?
???SDL_Quit();
?
???return?0;
}
?
保持窗口一直打開。
?
要保持窗口一直打開,我們創建一個循環,就像下面這樣:
?
bool gameRunning = true;
?
while (gameRunning)
{
}
?
當我們要退出循環時候,只需要將gameRunning賦值為false。這里我選擇用戶關閉的時候給他賦值。
?
要想偵測到用戶關閉窗口,我們呼叫?SDL_PollEvent()函數。這個函數有一個SDL_Event結構體的參數,里面包含了當前發
生事件的信息。函數返回0表示沒有事件發生,所以我們需要檢查它的返回值來確定所要處理的事件。
?
雖然SDL_Event結構體里面有各種變量,但是這里我們所要考慮的只有type變量,如果這個變量值為SDL_QUIT,那么我們就
知道了用戶想要關閉窗口。(也就是用戶按下了了窗口上方的X按鈕)
?
下面的代碼用來創建一個窗口,它一直打開知道點擊關閉為止。
?
#include?"SDL.h"?
const?int?WINDOW_WIDTH?=?640;
const?int?WINDOW_HEIGHT?=?480;
const?char*?WINDOW_TITLE?=?"SDL?Start";
?
int?main(int?argc,?char?**argv)
{
???SDL_Init(?SDL_INIT_VIDEO?);
?
???SDL_Surface*?screen?=?SDL_SetVideoMode(?WINDOW_WIDTH,?WINDOW_HEIGHT,?0,
??????SDL_HWSURFACE?|?SDL_DOUBLEBUF?);
???SDL_WM_SetCaption(?WINDOW_TITLE,?0?);
?
???SDL_Event?event;
???bool?gameRunning?=?true;
?
???while?(gameRunning)
???{
??????if?(SDL_PollEvent(&event))
??????{
?????????if?(event.type?==?SDL_QUIT)
?????????{
????????????gameRunning?=?false;
?????????}
??????}
???}
?
???SDL_Quit();
?
???return?0;
}
?
上面就是我們用SDL創建窗口的過程。
?
總結
以上是生活随笔為你收集整理的用SDL创建一个窗口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ffmpeg + x264 编码H264
- 下一篇: 移植JRTPLib到Montavista