SDL2.0入门学习记录

来源:互联网 发布:明星变脸软件是什么 编辑:程序博客网 时间:2024/05/24 16:16

简介

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
上篇安装完vs2010,下面进入正题:开始SDL 2.0入门。我的学习方法是找个入门教程,走一遍。很多教程都翻译自一个基于sdl1.2tutorials,去下载库时发现已经有2.x了。找个较新的教程看比较好。这里选的是:TwinklebearDev SDL 2.0 Tutorial,可以从下面获得:
英文:http://www.sdltutorials.com/
中文:http://adolfans.github.io/sdltutorialcn/sdl-2-dot-0-tutorial-index/
离线:Csdn(下载需要1积分):http://download.csdn.net/detail/oldmtn/7028385

教程学习

第一节:helloworld

惯例,用hello world来介绍SDL基本使用流程,分四步。
1、包含头文件#include <SDL.h>
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函数中。

本节把一些功能写成了函数,然后在main中只需要调用他们就行了(教程是不是跑题了?)。他们是:
Log输出函数:void logSDLError(std::ostream &os, const std::string &msg)
bmp初始化一个SDL_TextureSDL_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扩展库

本节已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

第六节:使用SDL_ttf绘制True Type字体

和第三节类似,略

 附:

官网: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
0 0
原创粉丝点击