SDL解析——SDL简介

来源:互联网 发布:python eval函数用法 编辑:程序博客网 时间:2024/06/07 10:16

SDL是什么?它是一个集输入控制,音频处理,视频处理于一身的跨平台底层函数库。SDL的一个主要应用领域就是游戏开发。很多知名的游戏都是以它为基础的。由于它的易用,高性能以及跨平台等诸多优点。被广泛的应用在各种操作系统之中。

 

    SDL本身是使用C语言写成的。对C/C++语言具有原生的支持。与此同时,它也被绑定到了其他编程语言之中,这些语言包括 Ada, C#, D, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk等。

 

    SDL的另外一个优势是,它是以LGPLv2发布的。这表示SDL在商业产品中使用将会更加自由。

 

    在当前版本的SDL中,涵盖了视频处理(video),音频处理(audio),窗口管理(window management),事件处理(event),控制手柄处理(joystick),光盘处理(CD-ROM),多线程(Multi-threaded Programming)以及时间管理(time)等几个部分。

 

    考虑到能够与大家进行交流,我会陆续使用一些篇幅来介绍SDL在某些方面的编程方法,期间也会涉及到SDL函数库的内部实现方法(知其然而不知其所以然非吾所欲也)。所以,此系列文章并非局限在技术文档层面上,而是一个交流的平台。文中会涉及到示例,方法,原理,设计模式等一些问题,希望与大家共同探讨,这也是我的文章的一贯风格。至于涵盖的内容,以视频,事件处理为主。其他内容是否涵盖,视情况而定。

 

    我一直秉承着在实践中学习的观点。于是,对于那些对SDL不了解的朋友们。写出一个类似”hello world!“这样的程序。是我们今后实践的一个基础。那么接下来的篇幅我们就会把重点放在怎样使用SDL成功编译运行一个最短的程序。

 

    请看代码:

sdl init code

    这段代码很简单。在确保头SDL头文件被包含的情况下,程序自定义了两个SDL资源初始化和释放函数。其中分别调用了SDL_Init以及SDL_Quit两个函数。而SDL_Init函数带有一个参数,它表示初始化哪些SDL资源。完整的列表如下:

sdl init list

    可想而知,作为全局初始化函数,SDL_Init函数必须在所有SDL操作之前被调用。SDL_Quit也是一样。

    下面我们尝试编译这段程序,在linux下,建议编写Makefile来编译程序。如果你是在其他操作系统中编译这段代码,请参考SDL在相关系统或工具中的配置方法。

    一个典型的Makefile模板如下:

makefile template

    本文不是Makefile普及文章,上边代码的实现细节将不涉及。但这里需要强调的是,我们在编译使用SDL的程序时,需要提供附加的编译参数,最好由pkg-config来提供:


pkg-config --cflags sdl


    而链接参数则需要使用下面的格式:


pkg-config --libs sdl


    这一步也许在其他环境下会略有不同。但无论如何,我们的目的是能够找到SDL头文件和链接库。

    将前面C程序代码保存成文件,命名为sdltest。并放在与Makefile相同的目录下编译。

    这就是第一段SDL程序,虽然运行不会有什么效果,但这就表示SDL初始化的顺利完成。