用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_HWSURFACESDL_DOUBLEBUF.聯起來使用要用或操作符: SDL_HWSURFACE | SDL_DOUBLEBUF

SDL_SetVideoMode()函數不僅僅是創建了一個窗口,它還創建了一塊內存區域叫"screen buffer",用來顯示圖像。這塊區

域負責顯示畫面到屏幕,標記變量SDL_HWSURFACE表示在顯存裏頭創建緩存;SDL_DOUBLEBUF表示我要創建兩個緩存區域,一

個用作前端緩存,這裏存放的就是我們正在顯示到屏幕的內容;另一個用作後端緩存,這裏存放的是我們將要顯示到屏幕上

的內容。當我們顯示將要顯示的內容時候,只需要交換前端緩存和後端緩存,這樣後端緩存的內容就被顯示出來。(譯者注

:也就是說前端緩存又變成了後端緩存,可以用來存放下一幅要顯示的畫面)這項技術叫做雙緩存,用來加速圖像的渲染過

程。

 

SDL_SetVideoMode()函數會返回一個指向SDL_Surface類型的screen bufferSDL_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創建窗口的過程。

發佈了2 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章