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

SDL游戏开发之一-SDL的简介相关推荐

  1. SDL游戏开发系列第一话:Hello SDL

      各位读者朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.从今天起博主将带领大家一起走进SDL游戏开发的世界,如果说此前的Unity3D游戏开 ...

  2. SDL游戏开发之三-瓦片地图

    一.瓦片地图 1)瓦片地图简介 瓦片地图(Tiled Map),又称为瓷砖地图,是在游戏开发中经常使用到的技术,它是由少量的尺寸相同的.小的瓦片图片拼接而成的很大的地图.相对于使用一张张图片来绘制地图 ...

  3. SDL游戏开发之四-卡马克卷轴

    上一篇实现了瓦片地图的绘制,但是单纯地使用上面的代码还是有些问题的,下面就来讨论一下单纯使用瓦片地图的局限性. 假设游戏的分辨率为960*720,瓦片地图的大小也是960*720,瓦片大小为32,那么 ...

  4. 深入探索SDL游戏开发

    前言 欢迎来到小K的SDL专栏第二小节,本节将为大家带来基本窗口构成.渲染器.基本图形绘制.贴图.事件处理等的详细讲解,看完以后,希望对你有帮助 文章目录 前言 一.简单窗口 二.渲染器 三.基本图形 ...

  5. 2.SDL游戏开发:把代码写长一点(一)

    2019独角兽企业重金招聘Python工程师标准>>> 接着上一篇讲,里面有几个值得研究的函数,尽管理API里已经说得很清楚了,调用SDL_Init()动态的加载和初始化SDL库. ...

  6. snail mock_HTML5 2D游戏开发,Snail Bait简介

    存档日期:2019年4月22日 | 首次发布:2012年8月28日 在本系列中,HTML5专家David Geary向您展示了如何一次实现HTML5 2D视频游戏. 此初始部分向您展示了完成的游戏,然 ...

  7. SDL系列讲解(一) 简介

    什么是 SDL Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Direct3D来实现直接访问图像硬件. 主要 ...

  8. 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL

     内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告:SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并 ...

  9. linux 驱动程序 摇杆 游戏,SDL游戏摇杆(Joy Stick)开发

    一直以为LINUX下SDL游戏摇杆(JoyStick)编程好象没有什么含意,没有什么合适的硬件来测试.近日去找华强北找实验模块,偶然找到USB的游戏摇杆.买来来一试,插上Linux直接支持,并且以在支 ...

最新文章

  1. re.sub()用法详解
  2. Shadow mapping
  3. 简单谈一点linux内核中套接字的bind机制--数据结构以及端口确定
  4. QThread中的互斥、读写锁、信号量、条件变量
  5. 分布式系统Paxos算法
  6. mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享
  7. C语言入门题-求阶乘序列前N项和
  8. 世界上最好用的浏览器Chrome 10周岁生日,迎来一大波更新!
  9. 判断mac地址单播还是组播(shell脚本)
  10. php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能
  11. MakeGenericMethod Reflection 反射 ObjectToXmlT Generic XmlSerializer
  12. 代理类 invoke方法没有返回值怎么办_何为动态代理?
  13. 计算机主机制作过程,计算机主机箱的制作方法
  14. python的前端框架_常见Python的Web开发框架
  15. 音量控制 单片机c 语言,(封贴)请大神代写音响音量控制程序(有偿代写)单片机加TDA7313控制...
  16. et99php,加密锁/加密狗ET199(包含网络锁功能)
  17. IIS的ISAPI接口简介
  18. 外贸人必备GoogleChrome浏览器插件推荐(一)
  19. BZOJ1299 巧克力棒
  20. word总页数不包含封面_word目录不包含封面 word 目录 不含封面

热门文章

  1. 流体力学方程的秘密(1)
  2. inline-bock间隙问题
  3. 1521端口已被占用解决方案
  4. Excel保护工作表了为什么就筛选不了了
  5. Table ... doesn‘t exist
  6. 2020.12.04 常用Linux命令
  7. Step7编程语言编程概述结构
  8. html基础-几种布局
  9. 柯桥日语培训:语法 | 「あまり 」知识解析
  10. java抽象类与final关键字的用法