SDL2.0入门学习记录


简介

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。从这些属性我们可以看出,SDL基本上可以认为是为以电脑游戏为核心开发的多媒体库。 SDL支持主流的操作系统,包括Windows和Linux。在官方的介绍中,我们可以找到它所支持的其他平台。(SDL supports Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. )。SDL本身从C语言开发,并且能很好的在C++等高级语言中使用。在官方可以看到SDL所支持的语言很多。(Including Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk, and Tcl. ) SDL在GNU LGPL version 2下发布,这意味着你可以免费的使用。并且可以免费的用于商业软件的制作(只要你直接使用SDL的动态链接库,Windows下的SDL.dll)。如果你将SDL库编译进了自己的二进制代码中,你需要指明你所使用的SDL库的版本以及包括你自己修改的源代码,并说明这些代码的原始出处。这是很宽松的法律,你可以用如此强大的多媒体库完全合法的免费开发商业游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值