在CodeBlocks中创建SDL项目

SDL(Simple DirectMedia Layer)是一个用C语言编写的跨平台的库,其通过OpenGL和Direct3D提供对音频,键盘,鼠标,手柄和图形硬件的底层访问,SDL可用于视频播放软件和游戏模拟器的开发,支持Windows、Mac OS X、Linux、iOS和Android等平台,截至今天(2020-6-13)最新稳定版本为2.0.12。

我们选择用CodeBlocks来创建SDL项目。

1、下载CodeBlocks

我使用的版本是Code::Blocks 17.12,下载链接在这里, 选择 codeblocks-17.12mingw-setup.exe(自带mingw)。

2、下载SDL库并解压

下载链接在这里,选择SDL2-devel-2.0.12-mingw.tar.gz (MinGW 32/64-bit)。

在CodeBlocks中创建SDL项目_第1张图片

3、在CodeBlocks中选择SDL2项目模板创建一个SDL2项目

在CodeBlocks中创建SDL项目_第2张图片

填写项目名称:

在CodeBlocks中创建SDL项目_第3张图片

选择SDL库的路径(i686-w64-mingw32为32位库,x86_64-w64-mingw32为64位库,选择32位的库兼容性更好一些):

在CodeBlocks中创建SDL项目_第4张图片

点击下一步、完成就创建了一个SDL项目。

利用模板创建好的项目中自带一个helloworld代码:

#include 
#include 
#include 
#include 

class InitError : public std::exception
{
    std::string msg;
public:
    InitError();
    InitError( const std::string & );
    virtual ~InitError() throw();
    virtual const char * what() const throw();
};

InitError::InitError() :
    exception(),
    msg( SDL_GetError() )
{
}

InitError::InitError( const std::string & m ) :
    exception(),
    msg( m )
{
}

InitError::~InitError() throw()
{
}

const char * InitError::what() const throw()
{
    return msg.c_str();
}

class SDL
{
    SDL_Window * m_window;
    SDL_Renderer * m_renderer;
public:
    SDL( Uint32 flags = 0 );
    virtual ~SDL();
    void draw();
};

SDL::SDL( Uint32 flags )
{
    if ( SDL_Init( flags ) != 0 )
        throw InitError();

    if ( SDL_CreateWindowAndRenderer( 640, 480, SDL_WINDOW_SHOWN,
                                      &m_window, &m_renderer ) != 0 )
        throw InitError();
}

SDL::~SDL()
{
    SDL_DestroyWindow( m_window );
    SDL_DestroyRenderer( m_renderer );
    SDL_Quit();
}

void SDL::draw()
{
    // Clear the window with a black background
    SDL_SetRenderDrawColor( m_renderer, 0, 0, 0, 255 );
    SDL_RenderClear( m_renderer );

    // Show the window
    SDL_RenderPresent( m_renderer );

    int rgb[] = { 203, 203, 203, // Gray
                  254, 254,  31, // Yellow
                    0, 255, 255, // Cyan
                    0, 254,  30, // Green
                  255,  16, 253, // Magenta
                  253,   3,   2, // Red
                   18,  14, 252, // Blue
                    0,   0,   0  // Black
                };

    SDL_Rect colorBar;
    colorBar.x = 0; colorBar.y = 0; colorBar.w = 90; colorBar.h = 480;

    // Render a new color bar every 0.5 seconds
    for ( int i = 0; i != sizeof rgb / sizeof *rgb; i += 3, colorBar.x += 90 )
    {
        SDL_SetRenderDrawColor( m_renderer, rgb[i], rgb[i + 1], rgb[i + 2], 255 );
        SDL_RenderFillRect( m_renderer, &colorBar );
        SDL_RenderPresent( m_renderer );
        SDL_Delay( 500 );
    }
}

int main( int argc, char * argv[] )
{
    try
    {
        SDL sdl( SDL_INIT_VIDEO | SDL_INIT_TIMER );
        sdl.draw();

        return 0;
    }
    catch ( const InitError & err )
    {
        std::cerr << "Error while initializing SDL:  "
                  << err.what()
                  << std::endl;
    }

    return 1;
}

编译、运行。

在CodeBlocks中创建SDL项目_第5张图片

PS:当然也可以在CodeBlocks中创建一个空白项目,然后设置sdl库的include和lib路径以及链接选项-lmingw32 -lSDL2main -lSDL2,注意要把动态链接库SDL2.dll放在可执行文件的同级目录下。

参考资料:

1、SDL入门教程:http://lazyfoo.net/tutorials/SDL/index.php

2、SDL视频教程:http://www.grhmedia.com/tutorials_SDL2.html

3、SDL库的wiki:https://wiki.libsdl.org/FrontPage

你可能感兴趣的:(C)