现今市面上充斥着各种成熟的游戏引擎,在某些程度上它们其实是降低了游戏开发的门槛,于此同时,各种相关的培训教程也充斥着网络的各个角落,特别是对于常见的如 Unity、Unreal Engine、CRYENGINE 等等,显然培训游戏开发也成为了一个暴利的产业链。
游戏开发并不是一件容易的事情,如果你在网络上搜索 如何开发游戏、怎样做游戏 等内容,你搜到的结果肯定是让你学习一门语言,熟悉一种引擎、更多的是列书单,我敢保证,它列出的书单肯定比你显示器要长的多……
本教程的目的是帮助新手快速上手 SDL 开发库,能够为接下来的 C语言小游戏开发教程 打下基础。SDL 本身就是一组简单的 API,因为源码用 C语言写成,所以你也可以简单的认为学习 SDL 本质上就是学习一组函数的相关用法。事实上,你只要掌握了相关流程,并不一定选择 SDL,你也可以选择其它类似的第三方库。
教程并不会详细介绍 SDL 的每一个函数用法,而是根据最小知识栈原则,围绕着 2D 游戏开发 这个主题,介绍游戏开发过程中必须掌握的相关函数,这对初学者来说非常重要,当你接受一个新知识点的时候,先做“减法”,再做“加法”能让你快速掌握相关的知识内容,帮助你更好的建立编程信心。
按照套路,我们先介绍一些 SDL 的相关概念,然后在接下来的文章中,依次介绍最小知识栈的每一部分内容,确保在学习整套教程之后,可以让你对游戏开发的前置知识有一个简单的了解。
SDL 本身是跨平台的,它是对各个平台特有 API 的抽象。
SDL 按照 API 的类型可以分为几个部分:
除了上述子系统外,SDL 还基于这些功能开发了几个扩展组件:
虽然上面的模块看起来很多,但是真正的需要学的的知识并不多,个人觉得制作简单的2D游戏大致需要掌握下面几个部分:
窗口部分。制作一个游戏最基本的就是显示一个窗口,所有的有些画面都是在窗口之内。在历史的文章中已经介绍过直接使用 Win32 API 搭建窗口的方法,但是对于 SDL 来说,它已经对这些步骤进行的二次封装,如果创建窗口可以直接使用 SDL 窗口管理的相关 API 即可。
事件部分。事件处理对于游戏来说非常重要,因为游戏中涉及大量的鼠标、键盘、手柄的外设交互,这些外设都可以看作一种事件产生装置,每种操作都会产生与之对应的事件,你可以在游戏中捕获这些事件,从而执行你游戏中对应的逻辑。
显示部分。游戏画面对于游戏的重要性无需多言,而显示部分主要的功能就是用来渲染游戏画面的,在不同的平台,可以使用不同的显示接口,SDL 已经将这些差异性进行了封装,在使用 SDL 过程中,你无需关注不同平台的差异性,不过在这份教程中并不会过于关注跨平台的问题,重点还是围绕 Windows 平台,关注 SDL 游戏开发的基本过程。
声音部分。声音对于游戏也非常重要。教程中主要会使用 SDL_mixer 扩展库实现对声音的播放,当然你也可以使用 音频播放教程 中的方式进行声音播放,只不过那些 API 只能在 Windows 平台使用而已。
除了上面的部分,其实还有网络模块、碰撞模块、动画模块等功能,但是这些并不是必须的,你不使用它们仍然可以制作一些游戏。当我们真正使用它们的时候再去了解显然比你一下子学习很多暂时用不上的知识要好的多。
通过上面的介绍,你应该对接下来需要掌握的内容有了一个大致的了解,接下来就开始我们 SDL 最小知识栈的学习之旅吧!
大佬,给点反馈?
平均评分 / 5. 投票数:
很抱歉,这篇文章不能帮助到你
请让我们改进这篇文章
告诉我们我们如何改善这篇文章?
“SDL2 游戏开发最小知识栈”上的3条回复
请问SDL2 能不能在三角形或者线上贴图?我们现在想实现圆环进度条,找了好久没有好办法,也不太想用OPENGL,因为我们要在windows linux android还有qnx上使用,上面跑的opengl版本都不一样,维护会很困难
感觉你们好像是用3D的方法写2D,没必要搞那么复杂的渲染啊,如果想实现圆环进度条,不是直接弄个png序列不就可以了么?每张png图片上绘制一个带有不同进度的圆环,这多简单方便啊,SDL本身感觉就是个弱鸡的2D图像显示接口,如果你想弄一堆三角网格组成一个圆环模型,然后表面贴图的话就弄复杂了,没啥必要……
非常好的文章,感谢博主!