SDL系列教程(转)

SDL教程(一)

 作者:akinggw

     在阔别半年后,我又回来了。这次回来,首先要向大家问声好,然后继续我们的游戏开发之旅。在以前的日子里,我主要在翻译一些游戏开发方面的文章,而现在,我决定自己写。从今天开始,我要向大家介绍一个非常出名的游戏开发库——SDL。

 SDL(Simple DirectMedia Layer)是什么呢?根据他的表面意思,翻译过来就是简单的指导媒体层。它的官方网站请访问  http://www.libsdl.org .

SDL 标志

SDL的作者是Sam Lantinga, Loki Entertainment Software的主力程序员(Lead Programmer)。Loki Entertainment是一家致力于向Linux移植顶尖游戏的公司。更多信息请访问 http://www.lokigames.com/

SDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频,键盘,鼠标,游戏杆,基于OPENGL(一个3D图象开发函数库)的3D 硬件,和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发大奖的 文明:权利的召唤(Civilization: Call To Power)。

文明:权利的召唤(Civilization: Call To Power)

 SDL是一个跨平台的函数库,几乎支持现今所有平台:Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX。

SDL用C语言写成,但是可以很容易在C++下面工作,并且SDL绑定了许多其它的语言,这其中就包括Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, and Smalltalk。

最后,我们来了解一下SDL的版权问题,SDL在GNU LGPL 2(一个国际上的开源组织)下发布,这个版本允许你将SDL免费地用于商业软件的开发。

 下面,我们来详细地了解SDL的功能,这样有利于我们今后的讲解。

SDL有哪些功能?

视频

· 设置8bpp或更高的任意色彩深度的视频模式。如果某个模式硬件不支持,可以选择转化为另一模式。

· 直接写入线性的图像帧缓冲(framebuffer)。

· 用颜色键值(colorkey)或者alpha混合属性创建surface。

· Surface的blit能自动的转化为目标格式。

blit是优化过的,并能使用硬件加速。x86平台上有针对MMX优化过的blit。

· 硬件加速的blit和fill(填充)操作,如果硬件支持的话。

事件

· 提供以下事件: o 应用程序的visibility发生改变 o 键盘输入 o 鼠标输入 o 用户要求的退出

· 每种事件都能通过SDL_EventState()关闭或者打开。

· 事件经由用户指定的过滤函数再被加入到内部的事件队列。

· 线程安全的事件队列。

 音频

· 设置8位和16位的音频,单声道或者立体声,如果格式硬件不支持,可以选择转换。

· 由独立的线程执行音频部分,并提供用户回调(callback)机制。

· 设计上考虑到了客户定制的软混音器,但实际上在例程中就包含了一个完整的音频/音乐输出库。 CD音频 · 完整的CD音频控制API 线程

· 简单的线程创建API

· 用于同步的简单的二进制信号量(semaphores 定时器

· 读取已流逝的毫秒数。

· 等待指定的毫秒数。

· 设置一个10毫秒精度的周期性定时器。 字节序无关

· 侦测当前系统的字节序

· 快速转换数据的函数

· 读写指定字节序的数据

以上就是SDL大致的功能介绍,上面的介绍来源于SDL中文介绍文档。但许多后续的开发者在不断的完善SDL。所以,现在SDL不光能实现上面的基本功能,

还有下面所列的功能:

A. 支持MPG,PNG,GIF等压缩图象文件格式的显示;

 B. 支持TrueType 字体的显示;

 C. 通过SDL_NET,可以实现网络的联接;

在这一章中,我们将真正的开始编程了。在开始进入奇妙的程序世界之前,我们将把准备工具备好。
需要那些工具呢?如果你拥有自己的电脑或者在办公室,学校使用电脑。你首先需要的是一个编译器,我使用的是VC6.0。为了便于你学习的更快,我也建议你使用它。但是你如果说你没有电脑,在网吧中上网,那我建议你使用DEV-C++。
DEV C++是一个优秀的开源软件,你可以在很多地方找到它,如果你还是找不到,那也许下面的地址对你有用(http://software.ty.sx.cn/soft/1120.html )。为了更好的编译,你最好下载版本号为4.9.9.2。
在以后的教程中,我将用这两种工具来编译程序,大家可以根据自己的需要选择相应的版本。
好,我想你已经下载或安装好了编译器吧!
 
那就让我们开始吧。
 
要使用SDL,首先必须下载SDL函数库,现在SDL的最高版本是1.2. SDL的官方网站(http://www.libsdl.org ),然后你会在网页的左下脚发现一个叫下载(Download)的栏目,在下面有一个SDL 1.2,点击它,你就会来到下面的界面:
 
而我们需要的就是在红框中圈着的那个文件,点击它,然后下载到你电脑的任何一个地方。
如果你还没有找到SDL函数库,下面的地址也许对你有用:
 
我们下面将讲解如何在VC6中设置它:
 
首先,双击刚才我们下载的那个文件,然后解压到任何的一个目录下。
A.            将我们刚才解压后子目录lib下的SDL.lib,SDLmain.lib拷贝到VC6所在的lib子目录下。VC6的lib子目录在:C:Program FilesMicrosoft Visual StudioVC98Lib。
B.             然后在VC6的include子目录下建立一个新的文件夹,并命名SDL。
C.            将我们刚才解压后的SDL库文件下的子目录include中的全部文件拷贝到我们刚才在VC6的include目录下建的SDL目录中。
D.            最后将SDL库文件下子目录lib中的SDL.dll文件拷贝到C:WINDOWSSYSTEM32。这样做的好处就是以后写SDL程序时,程序能随时找到它,并得以运行。
E.             下面我们打开VC6,打开”file”->Projects选项,建立一个Win32 项目:
 
 
然后电击“OK”,到下面的页面:
 

 
这里,我们选择一个空的项目。点“Finish”按钮,这时会出现一个对话框,询问你是否真的决定为一个空的项目。选”OK“。
 
接下来,在VC6主面板中选择“Project”->”Setting”选项。
 
在C/C++表,在“Category"中设置成"Code Generation",在"Use run-time library"下设置成multithreaded dll。
 
 
  
 
 
到这里,我们算是配置完成。
 
下面我们要建一个C++源文件,点击"File",在"File"选择“C++ source file.
 
 
  
  
然后在文件中拷贝下面的代码:
 
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "SDL/SDL.h"
#include "windows.h"
 
 
SDL_Surface *screen = NULL;       //屏幕接口
 
 
int main( int argc, char* args[] )   //主程序
{
    char msg[500];                       // 得到系统消息
    int done;                       
 
  
    /* 初始化SDL */
    if (SDL_Init (SDL_INIT_VIDEO) < 0)
    {
        sprintf (msg, "不能初始化 SDL: %sn", SDL_GetError ());
        MessageBox (0, msg, "Error", MB_ICONHAND);
        exit (1);
    }
    atexit (SDL_Quit); 
 
    /* 设置 640x480 16-bits 图象模式 */
    screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
   
    if (screen == NULL)
    {
        sprintf (msg, "不能设置成 640x480x16 图象模式: %sn",
          SDL_GetError ());
        MessageBox (0, msg, "Error", MB_ICONHAND);
        exit (2);
    }
   
    /*设置SDL窗口标题 */
    SDL_WM_SetCaption ("hello,the world", NULL);
   
    done = 0;
   
    //游戏循环 done=1时退出,done=0时继续
    while (!done)
    {
        SDL_Event event;
 
        /* Check for events */
        while (SDL_PollEvent (&event))
        {
            switch (event.type)
            {
            case SDL_KEYDOWN:
                break;
            case SDL_QUIT:
                done = 1;
                break;
            default:
                break;
            }
        }
 
    }
    SDL_Quit();
    return 0;   
}
 
如果运行成功,它将显示一个空的窗口。
如图所示:
 

到现在为止,我们的程序算是完成了。
 
在下一章中,我们将讲解如何在dev c++中配置SDL。
 SDL系列教程(三):DEV C++中的配置    
 
作者:akinggw
 
   首先,我要在这里感谢大家对我工作的大力支持,从昨天到今天的浏览人数来看,大家还是挺关心这个栏目的,在此,我要谢谢大家。
在上一篇教程中,我们讲解了如何在VC6中配置SDL。不知道你学会没有,我想我的讲解还是挺清楚的。如果你还没明白,请来信给我,我的email是 akinggw@126.com。
在这篇教程中,我们将讲解在DEV C++中配置SDL。上一篇教程中,我们已经说过,DEV C++是一个免费的编译器。关于DEV C++的下载地址请参考上一篇文章。
OK!下面,我们就开始配置SDL,(好期待吆…….)
 
首先,下载DEV C++ 4.9.9.2,下载后然后双击它,安装后的界面如下所示: 
 
DEV C++安装好以后,我们就需要SDL的库文件,到SDL的官方网站http://www.libsdl.org .
在下载页面中,你会找到下面这个文件(就是红线所指的那个文件),点击它,把它下载下来。
下载后,然后双击它,把它解压到任何一个目录上。
 
然后,我们就将在DEV C++中配置它:
 
A.                首先将SDL文件中子目录lib里的全部文件拷贝到DEV C++所在的lib子目录中,地址应该在 C:Dev-Cpplib。
B.                 然后将SDL文件中子目录bin里的全部文件拷贝到DEV C++所在的bin子目录中,地址应该在c:dev-cppbin .
C.                DEV C++文件中子目录include里建立一个新的文件夹“SDL”。地址应该在c:dev-cppinclude .
D.                然后将SDL文件中子目录include里的全部文件拷贝到我们刚才在DEV C++ 文件子目录include下建立的新文件夹SDL中。
E.                 最后将DEV C++文件中bin目录下的SDL.dll文件拷贝到C:WINDOWSSYSTEM32文件中。
  
   现在,打开DEV C++,然后在”File”->”New”->”Project”,打开一个新的空的项目:
然后在菜单上选择”Project”->”Project Options”
 
GeneralType选项选择Win32 GUI.,这样做的目的是保证我们的程序不被弹出。
 
 
然后选择Parameters表,在Linker中输入下面的东西:
-lmingw32 -lSDLmain lSDL
最后在项目中添加一个新的源代码文件。
然后在文件中输入以下代码:
 
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "SDL/SDL.h"
#include "windows.h"
 
SDL_Surface *screen = NULL;       //屏幕接口
 
 
int main( int argc, char* args[] )   //主程序
{
       char msg[500];                       // 得到系统消息
       int done;                       
 
  
       /* 初始化SDL */
       if (SDL_Init (SDL_INIT_VIDEO) < 0)
    {
        sprintf (msg, "不能初始化 SDL: %sn", SDL_GetError ());
        MessageBox (0, msg, "Error", MB_ICONHAND);
        exit (1);
    }
    atexit (SDL_Quit); 
 
    /* 设置 640x480 16-bits 图象模式 */
    screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
   
       if (screen == NULL)
    {
        sprintf (msg, "不能设置成 640x480x16 图象模式: %sn",
          SDL_GetError ());
        MessageBox (0, msg, "Error", MB_ICONHAND);
        exit (2);
    }
      
       /*设置SDL窗口标题 */
    SDL_WM_SetCaption ("hello,the world", NULL);
   
       done = 0;
      
       //游戏循环 done=1时退出,done=0时继续
    while (!done)
    {
        SDL_Event event;
 
        /* Check for events */
        while (SDL_PollEvent (&event))
        {
            switch (event.type)
            {
            case SDL_KEYDOWN:
                break;
            case SDL_QUIT:
                done = 1;
                break;
            default:
                break;
            }
        }
 
    }
    SDL_Quit();
    return 0;   
}
如果运行成功,它将显示一个空的窗口。
如图所示:
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值