zoukankan      html  css  js  c++  java
  • SDL 开发实战(一):SDL介绍及开发环境配置

    一、什么是SDL?

    SDL是 “Simple DirectMedia Layer”的缩写,SDL是一个开源的跨平台的多媒体库,封装了复杂的音视频底层操作,简化了音视频处理的难度。

    SDL使用C语言写成,提供了数种控制图像、声音、输出入的函数,可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

    1. SDL 库分类

    SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。

    这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:

    • SDL_image : 支持时下流行的图像格式,如BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
    • SDL_mixer:更多的声音输出函数以及更多的声音格式支持。
    • SDL_net:网络支持。
    • SDL_ttf:TrueType字体渲染支持。
    • SDL_rtf:简单的RTF渲染支持。

    2. SDL 子系统分类

    SDL 按照功能可以分成下列数个子系统(subsystem):

    • Video(图像): 图像控制以及线程(thread)和事件管理(event)。
    • Audio(声音): 声音控制
    • Joystick(摇杆): 游戏摇杆控制
    • CD-ROM(光盘驱动器): 光盘媒体控制
    • Window Management(视窗管理): 与视窗程序设计集成
    • Event(事件驱动):处理事件驱动

    二、 SDL 开发环境配置

    学习阶段推荐使用Visual Studio进行学习,因为环境配置方面相对来说比较简单。后续需要向其他平台迁移的时候,再进一步深入学习和整理。

    SDL官网:http://www.libsdl.org/index.php 。目前SDL有两个版本 1.2 和 2.0,建议学习阶段使用 SDL 2.0。

    1. 下载SDL Development Libraries 

    下载地址为:http://www.libsdl.org/download-2.0.php

    解压缩文件,将这个文件夹拷贝到任意地方。

    2. 在Visual Studio 中新建一个控制台项目

    将第1步解压的文件的include目录和lib目录拷贝到项目的目录下。

    3. 添加include目录

    右键打开项目的属性窗口,找到 C/C++,添加附加包含目录:

    4. 添加 library 目录

    将lib目录添加配置进来:

    5. 添加"附加依赖项"

    先找到属性-->链接器--> 输入---> 附加依赖项,添加附加依赖项:SDL2.lib;SDL2main.lib;

    6. 编写HelloWorld代码,验证环境配置

    // SDL.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include "pch.h"
    #include <iostream>
    
    extern "C" {
    #include "SDL.h"
    }
    
    int main(int argc, char* argv[]) 
    {
    if (SDL_Init(SDL_INIT_VIDEO)) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); if (win == nullptr) { std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; return 1; } SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == nullptr) { SDL_DestroyWindow(win); std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } std::string imagePath = "1.bmp"; SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str()); if (bmp == nullptr) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); SDL_FreeSurface(bmp); if (tex == nullptr) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } for (int i = 0; i < 3; ++i) { SDL_RenderClear(ren); SDL_RenderCopy(ren, tex, NULL, NULL); SDL_RenderPresent(ren); SDL_Delay(1000); } SDL_DestroyTexture(tex); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit(); // Return return 0; }

    7. 查看代码运行结果

    至此,我们的SDL的环境配置成功了,并且能够正常使用了。

  • 相关阅读:
    YTU 2481: 01字串
    smarty的自定义函数
    $_SERVER['SCRIPT_FLENAME']与__FILE__
    pdo中query()与prepare().execute()
    pdo中bindParam()与bindValue的区别
    pdo简介--错误与错误处理
    pdo的三个预定义类,PDO PDOStatement PDOException
    根目录 上级目录 当前目录
    反射机制(转)
    log4j 日志配置
  • 原文地址:https://www.cnblogs.com/renhui/p/10449936.html
Copyright © 2011-2022 走看看