SDL2 游戏开发最小知识栈

SDL 最小知识栈

现今市面上充斥着各种成熟的游戏引擎,在某些程度上它们其实是降低了游戏开发的门槛,于此同时,各种相关的培训教程也充斥着网络的各个角落,特别是对于常见的如 Unity、Unreal Engine、CRYENGINE 等等,显然培训游戏开发也成为了一个暴利的产业链。

游戏开发并不是一件容易的事情,如果你在网络上搜索 如何开发游戏怎样做游戏 等内容,你搜到的结果肯定是让你学习一门语言,熟悉一种引擎、更多的是列书单,我敢保证,它列出的书单肯定比你显示器要长的多……

本教程的目的是帮助新手快速上手 SDL 开发库,能够为接下来的 C语言小游戏开发教程 打下基础。SDL 本身就是一组简单的 API,因为源码用 C语言写成,所以你也可以简单的认为学习 SDL 本质上就是学习一组函数的相关用法。事实上,你只要掌握了相关流程,并不一定选择 SDL,你也可以选择其它类似的第三方库。

教程并不会详细介绍 SDL 的每一个函数用法,而是根据最小知识栈原则,围绕着 2D 游戏开发 这个主题,介绍游戏开发过程中必须掌握的相关函数,这对初学者来说非常重要,当你接受一个新知识点的时候,先做“减法”,再做“加法”能让你快速掌握相关的知识内容,帮助你更好的建立编程信心。

1. SDL 简介

按照套路,我们先介绍一些 SDL 的相关概念,然后在接下来的文章中,依次介绍最小知识栈的每一部分内容,确保在学习整套教程之后,可以让你对游戏开发的前置知识有一个简单的了解。

SDL 本身是跨平台的,它是对各个平台特有 API 的抽象。

SDL 按照 API 的类型可以分为几个部分:

  • Basics ,用于系统初始化、错误处理、日志打印等基本功能。
  • Video,用于窗口管理和显示、像素纹理渲染等功能。
  • Input Events,用于处理各种事件,包括键盘、鼠标、手柄等外设。
  • Force Feedback,主要用于各种“力反馈”的设备支持。
  • Audio,用于音频设备管理,包括播放、录制等操作。
  • Threads,用于多线程、原子操作以及线程管理等功能。
  • Timers,用于定时器的支持。
  • File Abstraction,文件系统相关操作。
  • Shared Object Support,用于动态库的加载以及函数查找等相关操作。
  • Platform and CPU Information,主要用于平台检测、CPU检测、字节序、位运算等功能。
  • Power Management,电源状态管理。
  • Additional Functionaliy,平台相关的附加功能。

除了上述子系统外,SDL 还基于这些功能开发了几个扩展组件:

  • SDL_image 用于支持额外的图片格式,包括常见的 PNG、BMP、WEBP、GIF、JPEG、TIFF 等。
  • SDL_mixer 用于支持额外的音频格式,包括 MP3、OGG、WAV 等。
  • SDL_ttf 用于 TrueType 字体的渲染。
  • SDL_rtf 用于简单的 RTF 渲染支持。
  • SDL_net 用于网络相关的支持。

2. 游戏开发基本模块

虽然上面的模块看起来很多,但是真正的需要学的的知识并不多,个人觉得制作简单的2D游戏大致需要掌握下面几个部分:

  • 窗口部分。制作一个游戏最基本的就是显示一个窗口,所有的有些画面都是在窗口之内。在历史的文章中已经介绍过直接使用 Win32 API 搭建窗口的方法,但是对于 SDL 来说,它已经对这些步骤进行的二次封装,如果创建窗口可以直接使用 SDL 窗口管理的相关 API 即可。

  • 事件部分。事件处理对于游戏来说非常重要,因为游戏中涉及大量的鼠标、键盘、手柄的外设交互,这些外设都可以看作一种事件产生装置,每种操作都会产生与之对应的事件,你可以在游戏中捕获这些事件,从而执行你游戏中对应的逻辑。

  • 显示部分。游戏画面对于游戏的重要性无需多言,而显示部分主要的功能就是用来渲染游戏画面的,在不同的平台,可以使用不同的显示接口,SDL 已经将这些差异性进行了封装,在使用 SDL 过程中,你无需关注不同平台的差异性,不过在这份教程中并不会过于关注跨平台的问题,重点还是围绕 Windows 平台,关注 SDL 游戏开发的基本过程。

  • 声音部分。声音对于游戏也非常重要。教程中主要会使用 SDL_mixer 扩展库实现对声音的播放,当然你也可以使用 音频播放教程 中的方式进行声音播放,只不过那些 API 只能在 Windows 平台使用而已。

除了上面的部分,其实还有网络模块、碰撞模块、动画模块等功能,但是这些并不是必须的,你不使用它们仍然可以制作一些游戏。当我们真正使用它们的时候再去了解显然比你一下子学习很多暂时用不上的知识要好的多。

3. Let’s go

通过上面的介绍,你应该对接下来需要掌握的内容有了一个大致的了解,接下来就开始我们 SDL 最小知识栈的学习之旅吧!

大佬,给点反馈?

平均评分 / 5. 投票数:

很抱歉,这篇文章不能帮助到你

请让我们改进这篇文章

告诉我们我们如何改善这篇文章?

“SDL2 游戏开发最小知识栈”上的3条回复

请问SDL2 能不能在三角形或者线上贴图?我们现在想实现圆环进度条,找了好久没有好办法,也不太想用OPENGL,因为我们要在windows linux android还有qnx上使用,上面跑的opengl版本都不一样,维护会很困难

感觉你们好像是用3D的方法写2D,没必要搞那么复杂的渲染啊,如果想实现圆环进度条,不是直接弄个png序列不就可以了么?每张png图片上绘制一个带有不同进度的圆环,这多简单方便啊,SDL本身感觉就是个弱鸡的2D图像显示接口,如果你想弄一堆三角网格组成一个圆环模型,然后表面贴图的话就弄复杂了,没啥必要……

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注