本教程为一个长系列,旨在于从零开始边学习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教程:
推荐贴吧:
c4driod吧
SDL吧