1. 程式人生 > >SDL2學習筆記1-環境搭建以及Hello SDL

SDL2學習筆記1-環境搭建以及Hello SDL

SDL(SimpleDirectMedia Layer)是一套開放原始碼跨平臺多媒體開發,使用C語言寫成。SDL提供了數種控制影象、聲音、輸出入的函式,讓開發者只要用相同或是相似的程式碼就可以開發出跨多個平臺(LinuxWindowsMac OS X等)的應用軟體。目前SDL多用於開發遊戲、模擬器、媒體播放器等多媒體應用領域。

採用VS2012進行開發。

第一步,下載SDL的標頭檔案以及lib庫檔案(此處為下載Visual Studio下的標頭檔案以及庫檔案)。在這裡下載:


第二步,進行環境的搭建。

開發環境採用VS2012

新建控制檯工程後,將下載下來的include資料夾以及

lib資料夾複製到工程目錄下。

下面進行設定標頭檔案目錄以及lib庫檔案目錄。

1).標頭檔案目錄設定如下:


2).lib庫目錄設定如下(win32 Debug下設定方法):


3).附加依賴項設定


4).將下載下來的lib資料夾下x86資料夾下的SDL2.dll動態連結庫拷貝至工程Debug資料夾下。


第三步,開始編寫程式。程式如下:

//最簡單的SDL程式
//2015.8.11
//程式功能:顯示一個640*480大小的視窗,視窗內容為綠色
//
//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>

//Screen dimension constants  螢幕寬高設定
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main( int argc, char* args[] )
{
	//The window we'll be rendering to
	SDL_Window* window = NULL;

	//The surface contained by the window
	SDL_Surface* screenSurface = NULL;

	//Initialize SDL  初始化SDL視訊子系統
	if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
	{
		printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
		return 0;
	}
	
	//Create window  建立視窗
	window = SDL_CreateWindow( "Hello SDL",//視窗標題
						SDL_WINDOWPOS_UNDEFINED,//視窗位置設定
						SDL_WINDOWPOS_UNDEFINED, 
						SCREEN_WIDTH, //視窗的寬度
						SCREEN_HEIGHT,//視窗的高度
						SDL_WINDOW_SHOWN  //顯示視窗
						);
	if( window == NULL )
	{
		printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
		return 0;
	}

	//Get window surface
	screenSurface = SDL_GetWindowSurface( window );

	//Fill the surface green   填充顏色為綠色
	SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0x00, 0xff, 0x00 ) );

	//Update the surface
	SDL_UpdateWindowSurface( window );

	//Wait two seconds 延時2000毫秒
	SDL_Delay( 2000 );


	//Destroy window
	SDL_DestroyWindow( window );

	//Quit SDL subsystems
	SDL_Quit();

	return 1;
}

程式執行現象如下:




部分函式說明:

①  : 初始化

 int  SDL_Init(Uint32 flags); 

  函式介紹 

   這個函式是用於初始化SDL的,你必須在呼叫其他的SDL函式之前呼叫該函式。其中

flags的引數和意義如下。當你需要初始化多個子系統的時候,可以用把這些引數或 起來。

SDL_INIT_TIMER        初始化  計時器  子系統

SDL_INIT_AUDIO        初始化  音訊    子系統

SDL_INIT_VIDEO        初始化   視訊    子系統

SDL_INIT_CDROM       初始化   光碟機    子系統

SDL_INIT_JOYSTICK       初始化  搖桿    子系統

SDL_INIT_EVERYTHING    初始化以上全部的子系統

返回值說明 

返回 -1表示錯誤,返回 0表示初始化成功。

②  建立視窗

SDL_Window * SDLCALL SDL_CreateWindow(const char *title,
                                                      int x, int y, int w,
                                                      int h, Uint32 flags);


引數含義如下。
title  :視窗標題
x       :視窗位置x座標。也可以設定為SDL_WINDOWPOS_CENTERED或SDL_WINDOWPOS_UNDEFINED。
y       :視窗位置y座標。同上。
w      :視窗的寬
h       :視窗的高
flags :支援下列標識。包括了視窗的是否最大化、最小化,能否調整邊界等等屬性。
       ::SDL_WINDOW_FULLSCREEN,   ::SDL_WINDOW_OPENGL,
       ::SDL_WINDOW_HIDDEN,       ::SDL_WINDOW_BORDERLESS,
       ::SDL_WINDOW_RESIZABLE,    ::SDL_WINDOW_MAXIMIZED,
       ::SDL_WINDOW_MINIMIZED,    ::SDL_WINDOW_INPUT_GRABBED,
       ::SDL_WINDOW_ALLOW_HIGHDPI.

 返回建立完成的視窗的ID。如果建立失敗則返回0。

③:

int SDL_FillRect(SDL_Surface* dst,const SDL_Rect* rect,Uint32 color)

引數說明:dst為所要填充顏色的Surface型別指標,rect為填充顏色的矩形區域, color為要填充的32為無符號整型顏色值。

引數說明:color=SDL_MapRGB(dst->format,Uint8 R,Uint8 G,Uint8 B),R為紅色,G為綠色,B為藍色(範圍為0—255的16進位制的數,例如0xff,或者0XFF)。(或者由SDL_MapRGBA(SDL_Surface*format,Uint8 R,Uint8 G,Uint8 B, Uint8 A)得到,A為alpha透明度,0為完全透明,255為完全不透明)

函式說明:使用這個函式將設定的矩形區域填充為指定的顏色,成功返回0。


本測試工程下載地址:http://download.csdn.net/detail/hjl240/8990221

SDL幫助文件離線版下載地址:http://download.csdn.net/detail/hjl240/8990135