原文地址:https://www.cnblogs.com/landmark/category/311822.html
介绍SDL图形库的使用
摘要: 前面教程里,我们只显示图片,没提到如何显示文字,SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字。ttf是True Type Font的缩写,ttf是Windows下的缺省字体,它有美观,放大缩小不变形的优点,因此广泛应用很多场合。 使用ttf库的第一件事要从Windows的字库下拷贝出一个字库出来,最好是中文字体,这样可以同时支持英文和中文显示。它一般在c:windowsfonts 目录下面。比如simhei.ttf 就是仿黑体的字库,将这个文件拷贝到你的源文件目录下。 要使用SDL_ttf库首先要下载该扩展库:http://www.libsdl.org/pro...阅读全文
posted @ 2012-06-01 11:10 成少雷
摘要: 如果我们在SDL程序中需要每个一个固定时间去处理一件事情,那么我们需要一个定时器,就像生活中钟表一样可以整点报时,这个功能就是SDL的定时器子系统,你要使用SDL的定时器必须初始化定时器子系统,请看《SDL起动与退出》,SDL定时器比较简单就是一个间隔固定时间的函数调用,如果你要添加一个定时器可以使用函数SDL_AddTimer,其原型为:SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param);其中:函数的返回值SDL_TimerID是一个结构体指针,SDL文档中并没有给出其..阅读全文
posted @ 2012-05-25 16:48 成少雷
摘要: 前面我们已经讲过键盘事件的处理,这次聊聊鼠标事件处理。我们从队列里获取到事件以后,可以检测事件的类型,鼠标事件有两个:鼠标键(按下、松开)和鼠标移动。一般的检测代码如下: 1 SDL_Event myEvent;//事件 2 int quit=0; 3 4 while (!quit) 5 { 6 while (SDL_PollEvent(&myEvent)) 7 { 8 switch (myEvent.type)//检测事件类型 9 {10 case SDL_QUIT:11 quit = 1;12 ...阅读全文
posted @ 2012-05-17 22:03 成少雷
摘要: 如果我们要做一个游戏,会涉及到大量的图片,如果这些图片都用单个文件保存,那程序里会加载大量的图片,会有很多表面,处理起来很麻烦,一般会把游戏里使用的图片分类,一类图片保存到一个大图片里,使用的时候在按要求裁剪出需要的部分,这张大图就叫精灵图,裁剪出来的部分叫精灵。 下面我们做一个简单的例子,来演示一下如何裁剪精灵图,需要的图片有两张,第一张是背景图,随便用什么都可以,第二张是精灵图。我们会让精灵在地图上走动。 精灵图里是一个小人各种样子,小人大小都是一样的,图片大小为96*192,所以可以计算出每个小人(精灵)大小为32*48,这样我们就可以按照这个比例抠出精灵。SDL_Surface *g.阅读全文
posted @ 2012-05-11 15:38 成少雷
摘要: 在进行编写SDL程序时,会出现很多意外情况,比较常见的问题有:无法加载“SDL.h”,“No such file ordirectory” 这应该是最常见的一类问题,原因是你SDL安装的有问题,比如说你的SDL头文件没有放到指定的位置,会引起系统无法找到头文件,你可以这样测试一下: 在包含的sdl.h上右键,点“go to Header file”如果能够转到sdl.h这个头文件,证明你sdl安装没问题,如果不能则要看一看是不是头文件加载的不对,如果你是按教程的第一种方式安装的SDL,应该这样加载头文件:#include <sdlSDL.h> 注意这里<>里的字符区分阅读全文
posted @ 2012-05-11 10:36 成少雷
摘要: 到目前为止,我们的程序还是静态的,只能显示图片,不能接收任何的按键、不能检测鼠标等。所有窗口程序基本上都是基于事件驱动的,当某个事件发生时,程序会做出相应的相应,这种方式和控制台程序有很大的不同,这种方式更加接近真实的世界. 那么什么是事件呢?事件可能是由使用者操作产生的,比如使用者按下一个键,松开一个键,或点击了鼠标等,也可能是硬件产生的比如时钟脉冲等。任何一个窗口程序都使用一个事件队列来保存这些事件,队列的一个特性便是先进先出,先进入队列的事件会被优先处理。如下图所示,事件在队尾入队,队头出队,先发生的事件先入队,出队的时候也会先出队。事件入队是由系统处理的,我们不用关心,我们关心的...阅读全文
posted @ 2012-05-10 16:14 成少雷
摘要: 视频子系统中构基本概念和常用数据结 视频子系统中基本概念: 1.坐标系统 SDL视频子系统的坐标系统,SDL坐标是以屏幕左上角作为坐标原点,x轴向右增长,y轴向下增长。象这样: SDL坐标系统 这和我们以前知道的笛卡尔坐标系不一样,大家要牢记这一点。再者,SDL中任意一个表面(包括显示表面)的左上角是坐标原点,任意一个表面都用一个矩形来表示大小。 2. 像素(Pixel) 屏幕上一个个光点称为像素,是屏幕显示的最小单位,我们所说的屏幕分辨率1024*768,就是指一屏有个768行,每行有1024个像素。如果只显示黑白色,一个像素只需要0,1即可表示,但大多数情况下,屏幕不只...阅读全文
posted @ 2012-05-08 17:28 成少雷
摘要: 到现在为止我们只创建了一个窗口,其他什么都没干,这次我们将在窗口里显示图片,这是视频子系统最常用的功能,显示图片。SDL视频子系统只能加载bmp格式的位图。调用函数是SDL_Surface *SDL_LoadBMP(const char *file);这个函数的参数是c语言的字符串,返回值是一个绘图表面。在SDL中有两种绘图表面,第一种是使用SDL_SetVideoMode函数生成的显示表面(或窗口),显示表面是唯一的,只能使用SDL_SetVideoMod生成,显示表面可以直接显示在屏幕上;除了显示表面,加载图片生成的表面,加载字体生成的表面,这些表面不能直接显示在屏幕上,这是这两种表面..阅读全文
posted @ 2012-05-06 10:33 成少雷
摘要: SDL视频子系统 在SDL中最为常用子系统就是视频子系统。这里说的视频不是指我们平常播放的电影等,而是指在屏幕上显示出来的东西,你需要在屏幕上显示图片、文字等那就必须使用视频子系统,否则什么都看不到,视频子系统支持:设置视频模式或者说创建视频窗口;支持直接的图像帧缓冲;支持Alpha像素混合;支持Blit位块传输(可以硬件加速);支持窗口管理;支持图形渲染。 要使用视频子系统首先要创建一个SDL窗口(或者说设置SDL的显示模式),我们可以使用: /* 功能:建立SDL显示表面 参数:int width 窗口宽度 单位象素 int height 窗口高度 单位象素 in...阅读全文
posted @ 2012-05-04 13:17 成少雷
摘要: 上一次我们建立起了SDL环境,接下来,我们谈一谈什么是SDL?如何起动和退出SDL. Simple DirectMedia Layer库,简称SDL,它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。这些多媒体功能包括了视频、音频、键盘和鼠标(事件)、游戏摇杆等。当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。也就是说我们通过这个图形库可以自己写游戏,播放电影、歌曲等等,哪些C语言基本库里无法完成的任务,我们可以通过SDL的库完成,只要按上一次的要求安装完了SDL,我们就可以自由...阅读全文
posted @ 2012-04-29 10:50 成少雷
摘要: SDL安装C语言没有图形库,似乎编写C语言的程序就要面对那个黑黑的控制台窗口,这也是很多人对C语言提不起兴趣的原因,但我们可以使用第三方的图形库,比如说open GL,directX,SDL等等,其中SDL比较小巧,并且是开源的,适合入门者学习。有了图形库以后我们就可以编写界面丰富多彩的程序了,你会发现一片新的天地! SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。 SDL图形库包括八个子系统:视频、音频、事件、光驱、文件读写、游戏杆、时间、进程。最经常使用的是前三个,每一..阅读全文