SDL遊戲開發之二-配置開發環境

一般情況下,在任何一個計算機語言中要使用第三方功能時,都需要配置環境,SDL同樣如此。

在我一開始學習的時候對環境配置是深惡痛絕的,稍微出錯都會影響學習積極性。但不得不承認,環境的配置一般都是第一件要做的事。

一.爲什麼要進行環境配置?

以c/c++爲例,所謂的環境配置就是配置頭文件庫文件的目錄。因爲我們在自己的代碼中要使用第三方所提供的API(簡單地說,API就是各種函數,比如c/c++的<math.h> 的abs函數),所以需要在編譯、鏈接中要能獲取到對應的頭文件和庫文件的位置。頭文件中包含的一般是函數的聲明、宏、結構體、類等;而庫文件中包含的則是編譯後的函數實現的集合

c/c++程序從編寫到執行一般分爲以下幾個階段:

圖一 來源url

 

  • 預編譯:此過程是宏替換,比如#include就是把對應的頭文件包含進來、#ifndef是條件判斷。
  • 編   譯:對源代碼進行編譯,此時會判斷用到的函數是否有聲明。
  • 彙編:把代碼轉成對應平臺下的彙編語言。
  • 鏈   接:把用到的庫文件鏈接到可執行文件中(靜態庫)。
  • 運   行:如果使用到動態庫,那麼在執行前會嘗試鏈接動態庫,只有鏈接成功纔會執行。

如果是在IDE下進行開發的話,通常上面幾個階段都是包含在IDE裏面的,比如使用Visual Studio(VS)的話,則只需要點擊編譯、運行按鈕即可。標準庫一般都是各個操作系統所提供,而第三方庫比如SDL則需要自行配置頭文件和庫文件的目錄,以使得在編譯、鏈接階段可以查找成功。

庫文件又分爲靜態庫動態庫,它們之間的區別僅僅在於鏈接時間的不同。靜態庫是在鏈接階段鏈接的,幷包含在可執行文件中;動態庫則是在運行前才嘗試鏈接的。

動態庫複用性高,而且如果該庫文件升級之後,則只需要替換相應的庫文件而無需對可執行程序進行編譯鏈接。不過靜態庫鏈接後僅僅只有一個文件,也得簡潔方便。

那麼不同的語言是怎麼相互調用的呢?比如java就可以調用c/c++的代碼。衆所周知的是,android開發使用的java語言,不過android遊戲開發同樣可以用c++開發。

在這之前,先說一說編譯型語言和解釋型語言的區別。

1.編譯型語言

類似於圖1,如果該語言有類似於圖一所示的編譯過程的話,那麼一般情況下爲編譯型語言。

編譯型語言是把代碼編譯鏈接後爲計算機可直接執行的機器碼(01代碼),比如c/c++就是編譯型語言。編譯型語言的特點就是運行速度快,但不具備可移植性,即windows下的可執行性程序是無法直接在linux內核下執行的。

2.解釋型語言

解釋型語言也稱爲腳本語言,其特點就是邊翻譯邊執行。一般情況下,解釋型語言都有一個類似於虛擬機的東西,而代碼是在虛擬機裏運行的,解釋型語言的經典如lua、javascript。

3.其他類型語言

在目前來說,有的語言並不能簡單地分爲編譯型語言或解釋型語言,比如java,java是編譯成class字節碼文件後,再在虛擬機中執行的。

那麼java是如何調用c/c++的呢?這就是庫文件的優點。前面提到過,庫文件是編譯後的函數的集合,這也就使得如果可以暴露庫文件的接口,理論上在同樣的操作系統內,任何一個語言都是可以進行調用的。

二.不同系統下的環境配置

不同操作系統的開發環境配置是類似的,總結起來就是讓代碼在編譯、鏈接過程中可以找得到對應的頭文件和庫文件。

對於一般的開發來說,如果只有一個文件的話,那麼一個gcc或者g++命令即可(gcc/g++是對源文件進行編譯的可執行文件);而如果有多個文件的話,爲了方便管理,則需要一個項目管理工具。如果是在windows下的話,Visual Studio(VS)是一個不錯的選擇;如果是在ubuntu下的話,cmake是個不錯的選擇。

值得一提的是,VS不僅僅是一個項目管理工具,它的功能及其強大。另外,cmake是跨平臺的一個項目管理工具,它是對makefile的封裝,cmake通過CMakeFileLists.txt生成makefile文件來編譯源文件。而所謂的makefile文件就是編譯源文件的規則。

無論是cmake還是makefile,它們的功能都是管理如何編譯。

1.Ubuntu環境配置

ubuntu下的環境配置相對比較簡單。在ubuntu中,一般可以使用APT(是一個類似於應用市場的軟件)進行安裝,在安裝前可以先搜索一下:

先說明下命名規則:lib是library的簡寫,表示庫;sdl2表示是SDL2庫;dev則是development的簡寫。綜上所述,我們要下載的是SDL2開發庫,而安裝則可以使用下面的命令:

sudo apt install libsdl2-dev

另外,還有幾個額外庫,也可以先行安裝:

sudo apt install libsdl2-dev
sudo apt install libsdl2-image-dev
sudo apt install libsdl2-ttf-dev
sudo apt install libsdl2-mixer-dev
sudo apt install libsdl2-gfx-dev
sudo apt install libsdl2-net-dev

SDL2_image爲擴展圖像庫,用來補充SDL2,因爲SDL2庫僅僅只能讀取BMP格式的圖片;SDL2_ttf是字體庫;SDL2_mixer是音效庫;SDL2_gfx是圖片操作庫;SDL2_net則是網絡庫。可根據需要自行安裝。後面兩個庫的使用頻率不如前面幾個庫。

2.Windows環境配置

如果是在windows下進行開發的話,那麼推薦Visual Studio(VS)。不得不承認的是,VS這個IDE確實不錯,這裏我推薦使用Visual Studio 2017 Community,社區版在註冊並登陸賬號後是可以免費使用的。當然,使用其他的IDE也是可以的,比如Code Block。不過,無論使用什麼樣的IDE,環境配置大致都相同,都是要確定頭文件庫文件的目錄。

首先需要去SDL官網去下載對應的開發庫,

 打開解壓後,我們需要的只是是include和lib這兩個文件夾,include文件夾中保存的是頭文件,而lib文件夾保存的是庫文件。

lib中有x86和x64兩個文件夾,x86表示32位應用所用的庫;而x64則是64位應用所用的庫,一般應用默認爲32位,所以我們使用的是x86文件夾中的庫文件。

接着需要在vs中創建一個空項目,

 FirstProejct項目保存在了D盤的VSProject文件夾中,這裏推薦以後的項目都創建在此文件夾下,在該文件夾下創建一個common文件夾,把剛下載的include文件夾和lib文件夾放在裏面,如下:

 像SDL庫等通用的庫可以爲其他項目所共用,因此放在common文件夾下還是可以的。

接下來就是要進行環境配置了,首先右鍵點擊項目:

接着添加頭文件目錄:

然後添加庫文件目錄:

還要設置依賴的庫:

好了,配置基本完成了,接下來就要編碼進行測試了:

#include "SDL.h"

int main(int argc, char** argv)
{
        SDL_Init(SDL_INIT_EVERYTHING);
	SDL_Window* win = SDL_CreateWindow("FirstProject", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 480, SDL_WINDOW_SHOWN);
	SDL_Renderer* ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
	bool running = true;
	SDL_Event event = {};

	while (running)
	{
		SDL_RenderClear(ren);
		//draw here
		SDL_RenderPresent(ren);
	
		while (SDL_PollEvent(&event))
		{
			switch (event.type)
			{
			case SDL_QUIT:
				running = false;
				break;
			}
		}
	}
	SDL_DestroyRenderer(ren);
	SDL_DestroyWindow(win);

	return 0;
}

 上面的代碼:創建窗口和渲染器,一直循環判斷是否有事件,SDL_QUIT表示存在退出事件。

如果此時編譯運行的話,應該會出現錯誤:

這是因爲SDL項目還需要動態庫 ,所以我們還要在一開始下載的lib文件夾中的x86文件夾中找到SDL2.dll,然後放在Debug文件夾下。

接着編譯運行,應該會出現兩個窗口,一個SDL窗口,另一個則是控制檯窗口。 

VS有兩個模式,分別是Debug模式和Release模式,顧名思義,Debug模式表示的是調試狀態,此時VS會有額外冗餘來便於調試;而Release則爲發行版本,它會進行優化。這兩個模式分別會生成Debug文件夾和Release文件夾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章