SDL媒体库编译及使用

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

编译

1、从SDL的官方网站上下载源码

http://www.libsdl.org/release/SDL2-2.0.3.zip

我这里用的是SDL2-2.0.3

解压

第二步:从微软官方下载DirectX10的安装包与SDK
DirectX10的安装包下载地址(建议使用迅雷直接把链接输进去下):http://hnny.skycn.com/down/directx_dec2005_redist.exe
DirectX10的SDK下载地址:http://download.microsoft.com/do ... a/dxsdk_aug2007.exe

经过上面两步的安装后,就可以很好的编译SDL了,
到D:/SDL-1.2.13下,把VisualC.ZIP解压到当前目录.(也就是D:/SDL-1.2.13/VisualC/下是其内容,否则肯定编译不了)

第三步:
打开文件: D:/SDL-1.2.13/VisualC/SDL.sln   ,开始编译(建议点击VS菜单:生成->批生成->全选,生成)

第四步:编译成功后,把Release版本的LIB集中起来,也就是把D:/SDL-1.2.13/VisualC/SDL/Release下的文件SDL.lib 和D:/SDL-1.2.13/VisualC/SDLmain/Release下的文件SDLmain.lib拷到D:/lib (没有该目录则新建).
把D:/SDL-1.2.13/VisualC/SDL/Release 下的SDL.DLL拷到C:/Windows/system32下(平常不建议这么做,因为就一个DLL,算了)

第五步:配置环境
打开VS菜单:工具->选项->项目和解决方案树目录下的VC++目录->添加包含文件目录: D:/SDL-1.2.13/include ->添加库文件目录: D:/lib

第六步:测试
新建一个WIN32控制台程序,在VS菜单:项目->属性->配置属性->链接器->输入:附加依赖项中加入:SDL.lib SDLmain.lib
添加一个CPP源文件:写上如下内容:

///
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL.h>
#include <windows.h>

/*
PLEASE NOTE: the program will require SDL.dll which is located in
              dev-c++'s dll directory. You have to copy it to you
     program's home directory or the path.
*/

/* The screen surface */
SDL_Surface *screen = NULL;


/* This function draws to the screen; replace this with your own code! */
static void
draw ()
{
    static int direction = 0;
    static int value = 0;
    static int which = 0;
    SDL_Rect rect;
    Uint32 color;

    /* Create a black background */
    color = SDL_MapRGB (screen->format, 0, 0, 0);
    SDL_FillRect (screen, NULL, color);

    /* Determine which color the layer should have */
    if (direction == 0)
    {
        value += 2;
        if (value >= 256)
        {
            value = 255;
            direction = 1;
        }
    }
    else
    {
        value -= 2;
        if (value <= 5)
        {
            value = 0;
            direction = 0;
            which++;
            if (which == 5)
                which = 0;
        }
    }

    /* Draw a layer with variable color */
    switch (which)
    {
      case 0:
          color = SDL_MapRGB (screen->format, value, 0, 0);
          break;
      case 1:
          color = SDL_MapRGB (screen->format, 0, value, 0);
          break;
      case 2:
          color = SDL_MapRGB (screen->format, 0, 0, value);
          break;
      case 3:
          color = SDL_MapRGB (screen->format, value, value, value);
          break;
      case 4:
          color = SDL_MapRGB (screen->format, value, 0, value);
          break;
    }

    rect.w = screen->w / 2;
    rect.h = screen->h / 2;
    rect.x = (screen->w / 2) - (rect.w / 2);
    rect.y = (screen->h / 2) - (rect.h / 2);
    SDL_FillRect (screen, &rect, color);


    /* Make sure everything is displayed on screen */
    SDL_Flip (screen);
    /* Don't run too fast */
    SDL_Delay (1);
}


int
main (int argc, char *argv[])
{

    int done;

    /* Initialize SDL */
    if (SDL_Init (SDL_INIT_VIDEO) < 0)
    {
        MessageBox (0,TEXT("完法初始化SDL"), TEXT("Error"), MB_ICONHAND); 
        exit (1);
    }
    atexit (SDL_Quit);

    /* Set 640x480 16-bits video mode */
    screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
    if (screen == NULL)
    {

        MessageBox (0, TEXT("无法把其设置为640*480模式"), TEXT("Error"), MB_ICONHAND); 
  
        exit (2);
    }
    SDL_WM_SetCaption ("SDL MultiMedia Application", NULL);

    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;
            }
        }

        /* Draw to screen */
        draw ();
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值