本文共 2244 字,大约阅读时间需要 7 分钟。
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
上篇安装完vs2010,下面进入正题:开始SDL 2.0入门。我的学习方法是找个入门教程,走一遍。很多教程都翻译自一个基于sdl1.2的tutorials,去下载库时发现已经有2.x了。找个较新的教程看比较好。这里选的是:TwinklebearDev SDL 2.0 Tutorial,可以从下面获得:
英文:http://www.sdltutorials.com/
中文:
离线:Csdn(下载需要1积分):
惯例,用hello world来介绍SDL基本使用流程,分四步。
1、包含头文件#include
2、初始化:SDL_Init(SDL_INIT_EVERYTHING)
3、使用:显示一张图片“hello world”。
这里先创建一个SDL_Window和一个与之绑定的SDL_Renderer:
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_Surface加载bmp图片:
bmp = SDL_LoadBMP("../res/Lesson1/hello.bmp");
把SDL_Surface转化为SDL_Texture
tex = SDL_CreateTextureFromSurface(ren, bmp);
使用SDL_RenderClear来清空SDL_Rende,然后使用SDL_RenderCopy来把texture画上去:
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tex, NULL, NULL);
更新屏幕的画面SDL_RenderPresent(ren);
4、退出SDL: SDL_Quit();
问题:在win+vs下编译会连接错误。因为连接器找不到入口man函数,SDL_main.h中把main define成了别的名字。解决办法在#include <SDL.h>前面#define SDL_MAIN_HANDLED或者在main前面#undefmain。这两个方法哪个才是正确的?
本节把一些功能写成了函数,然后在main中只需要调用他们就行了(教程是不是跑题了?)。他们是:
Log输出函数:void logSDLError(std::ostream &os, const std::string &msg);
用bmp初始化一个SDL_Texture:SDL_Texture* loadTexture(const std::string &file, SDL_Renderer *ren)
把SDL_Texture渲染到SDL_Renderer :void renderTexture(SDL_Texture *tex, SDL_Renderer *ren, int x, int y);
问题:1本节用到的模板cleanup怎么编译不过,谁来帮看一下。
2、 SDL_RenderCopy这两个函数的四个参数排列顺序费解,前面两个和后面两个的方向刚好是反着的,谁明白给我讲一下。
本节已SDL_image为例讲SDL扩展库的使用。基本和SDL库使用方法一样,总共分3步:
1、包含头文件#include "SDL_image.h"
2、使用SDL_image库
3、注销:IMG_Quit();
问题:SDL_image库使用前为什么没有类似SDL库的init操作:SDL_init()?
SDL不但包括图像输出,还支持输入处理。简单介绍了SDL_Event的使用。
问题:附件已实现了“三毛”移动,怎么用不同的按键让他往四个方向移动呢?
本节主要讲SDL渲染的灵活性,不但可以把SDL_Texture完整地绘制到SDL_Renderer
上,还可以从SDL_Texture中任意位置的一个矩形中的绘制到SDL_Renderer中任意位置的一个矩形中。主要用到了函数SDL_RenderCopy。
和第三节类似,略
官网:http://www.libsdl.org/index.php wiki:http://wiki.libsdl.org/FrontPage 课程中用到的code:
win+vs版本:http://download.csdn.net/detail/taozuiqizhong/8206475
linux版本:https://github.com/Twinklebear/TwinklebearDev-Lessons
转载地址:http://jwcoi.baihongyu.com/