windows 下的 SDL2 编程

一、下载

进入官网 http://www.libsdl.org/ ,网站相当简洁,直接在左下角找下载链接即可

windows 下的 SDL2 编程_第1张图片

点 SDL 2.0,转到 2.0 页面,现在最新的是 2.04,拉到下面找开发库

windows 下的 SDL2 编程_第2张图片

我们用 windows 下 MinGW 的:SDL2-devel-2.0.4-mingw.tar.gz (MinGW 32/64-bit)


二、安装

安装方法有两个,一个是单独目录安装,更简洁的办法的是直接合并到 MinGW 目录中去。

1、解压下载好的压缩包,得到 SDL2-2.0.4 目录,里面同时有 32 位的和 64 位的。

2、这里我们只采用 32 位:把  SDL2-2.0.4\i686-w64-mingw32 子目录下的所有文件和目录拷贝到 MinGW 的 32 位安装目录下 MinGW_w64\i686\i686-w64-mingw32,同名文件夹合并即可。

三、代码

// gcc -mwindows -o tsdl tsdl.c -lSDL2 -lSDL2main

#include <stdio.h>
#include <SDL2\SDL.h>

#undef main

int main(int argc, char *argv[])
{
    SDL_Window   *pWindow = NULL;
    SDL_Renderer *pRenderer = NULL;

    // 1. initialize SDL
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        printf("Failed to initialize SDL2 : %s\n", SDL_GetError());
        return 0;
    }

    // 2. create window
    pWindow = SDL_CreateWindow("Title : Test SDL2",
                               SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                               640, 480,
                               SDL_WINDOW_SHOWN);
    if(NULL == pWindow)
    {
        printf("Failed to create window : %s\n", SDL_GetError());
        return 0;
    }

    // 3. create renderer
    pRenderer = SDL_CreateRenderer(pWindow, -1, 0);

    // 4. clear the window to RGB(255, 127, 64)
    SDL_SetRenderDrawColor(pRenderer, 255, 127, 64, SDL_ALPHA_OPAQUE);
    SDL_RenderClear(pRenderer);

    // 5. show the window and display 5s
    SDL_RenderPresent(pRenderer);
    SDL_Delay(5000);

    // 6. exit
    SDL_Quit();
    return 0;
}

 注意:

1、int main(int argc, char *argv[]) 函数必须照此,不能 void 参数或 void 返回值。

2、int main(int argc, char *argv[]) 函数前面必须要有 #undef main

不然会报错:undefined reference to `WinMain@16'


另外,windows 下的 SDL 不支持多线程!

只能考虑过滤器方法,比如:

……
 
int process_events(const SDL_Event *event);

int main(int argc, char *argv[])
{
    ……
    SDL_SetEventFilter(process_events);
    ……
    // 主循环
    while (!quited)
    {
        SDL_PollEvent(NULL);
        ……
    }
    return 0;
}
 
int process_events(const SDL_Event *event)
{
    switch (event->type) {
        case ……:
        ……
        case ……:
        ……
        case ……:
        ……
    }
    return 0;
}





你可能感兴趣的:(windows 下的 SDL2 编程)