SDL遊戲開發之一-SDL的簡介

本教程爲一個長系列,旨在於從零開始邊學習SDL邊開發遊戲。

一.什麼是SDL?

SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以開發出跨多個平臺(Linux、Windows、Mac OS X等)的應用軟件。目前SDL多用於開發遊戲、模擬器、媒體播放器等多媒體應用領域。

以上來自360百科。下面則是自己的一些看法。

所謂SDL,就是一個跨平臺的、通用的庫。它旨在提供平臺無關的創建窗口、事件監聽等;而與前面提到的窗口創建等來說,SDL在繪圖方面來說並不是那麼出色,其提供的真正的繪圖函數僅僅也是隻有兩個而已,不過一般的2D遊戲的話,完全使用SDL開發已經是足夠的。而更高一級的遊戲開發則通常是SDL來處理窗口的創建、資源的加載、事件監聽等;使用OpenGL或OpenGL es等來負責繪製。

 

從上圖可知,SDL所做的就是封裝了各個操作系統下的差異性,並提供了平臺無關的API,使得開發者可以更好的進行上層開發。

二.什麼是遊戲引擎?

遊戲引擎是指一些已編寫好的可編輯電腦遊戲系統或者一些交互式實時圖像應用程序的核心組件。這些系統爲遊戲設計者提供各種編寫遊戲所需的各種工具,其目的在於讓遊戲設計者能容易和快速地做出遊戲程式而不用由零開始。大部分都支持多種操作平臺,如Linux、Mac OS X、微軟Windows。遊戲引擎包含以下系統:渲染引擎(即"渲染器",含二維圖像引擎和三維圖像引擎)、物理引擎、碰撞檢測系統、音效、腳本引擎、電腦動畫、人工智能、網絡引擎以及場景管理。(360百科

像cocos2d-x、unity等就屬於遊戲引擎,不過個人認爲cocos2d-x的腳本封裝沒有unity徹底。

接下來則把SDL與當下時興的名詞進行一個比較。

三.SDL與時興名詞的比較。

1.OpenGL

如果用一句話來概括的話,OpenGL的功能就是3D繪製,2D則是3D的一種特殊情況。OpenGL可以與SDL很好的配合使用,即OpenGL負責繪製,而SDL則負責處理繪製之外的事情,比如資源加載、文件存取、創建窗口、事件接收等。

2.cocos2d-x

cocos2d-x是一款c++遊戲引擎,cocos表示的是最初的cocos遊戲引擎,2d表示的是2d遊戲,而x則表示的跨平臺。所以,總的來說,cocos2d-x就是一款主攻2D遊戲的、c++的遊戲引擎。爲什麼說主攻呢?因爲就目前來說,cocos2d-x也開始涉及3D開發了。另外,cocos2d-x的繪圖使用的是OpenGL,而它的跨平臺則基於不同的平臺有着不同的處理,這部分倒是和SDL有些重疊。另外,目前cocos2d-x開始向腳本化發展,即在c++層上又封裝了一層,使得開發者可以使用js或者lua,再搭配Cocos編輯器進行開發。不過個人認爲相對於unity來說,Cocos並不成熟,而又因爲仍處於起步階段,所以更新快。個人認爲這既是好事,也是壞事。我一開始傾向於使用cocos2d-x進行遊戲開發,不過後來因爲一個bug和官方對c++的冷落,使得我轉戰其他。。。

3.unity

unity是一款閉源的、商用的、底層使用c++所寫的遊戲引擎,因爲unity的免費政策而流行起來。unity主攻是3d方向,目前也開始涉及2D遊戲的開發,並且也取得了不錯的成績。在編輯器方面,unity相對成熟的多,官方文檔也比較豐富。unity主要使用c#進行腳本開發,採用組件式編程,使得各個組件可複用性高。

四.總結

總而言之,SDL的功能可以認爲是cocos2d-x爲了跨平臺所做的工作的集合,而學習SDL遊戲開發,則是在學習SDL的API的基礎上,再進行遊戲方面的開發。SDL在封裝程度上類似於OpenGL,而與unity等成熟的遊戲引擎來說差了約兩層左右,即先是把SDL的API以c++進行封裝,然後再基於c++層再進行腳本的封裝。所以,SDL足夠底層,這也就導致了學習SDL就向學習c/c++一樣,可能要很久纔能有一個成品,即學習週期長。

每個人的目的與想法不同,則選擇也會不同。如果你想盡快的開發遊戲,則unity是一個好的選擇;如果你想學習c++的話,cocos2d-x是一個不錯的選擇;如果能耐着住寂寞的話,則跟着本教程是個不錯的選擇。

本系列主要參考

《SDL Game Development》

 

推薦SDL教程:

lazyfoo的SDL2教程

 

推薦貼吧:

c4driod吧

SDL吧

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