日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用SDL创建一个窗口

發布時間:2024/9/5 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用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創建窗口的過程。

?

總結

以上是生活随笔為你收集整理的用SDL创建一个窗口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。