Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1391081
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类: LINUX

2006-05-26 11:13:27

SDL系列教程(八):显示图象的一部分

作者:akinggw

欢迎进入今天的课程,今天我们要讲解如何显示图象的一部分。也许你要问,这有什么用呢?

它的用处大的很,比如,我们在玩“大话西游”时,我们的窗口是不是只显示了程序的一部分。

同样还有精灵的显示,这个我们在后面会慢慢讲解。

在这篇教程中,我会简单地讲解如何在有限的窗口中显示一幅巨大的图片。

先看下面这张图片:

 

它的高宽分别是1000 X 1000。而我们的屏幕分辨率只有640X480,显然不能全部显示这幅图片。

打开我们前面的代码,在apply_surface函数中,你会找到下面这个函数:

SDL_BlitSurface( source, NULL, destination, &offset );

 

我们函数的第二个参数使用的是空,意思是不传值,但现在我们要使用它。

这个参数的结构是SDL_Rect,我们在前面使用了它来显示图片。

 

这个结构如下:

SDL_Rect{

Int x;               //X坐标

Int y;               //Y坐标

Int w;              //宽度值

Int h;               //高度值

}

 

SDL_BlitSurface函数的第一个参数表示要显示的图片;第二个参数表示从要显示的图片的XY坐标开始到WH之内的范围;第三个参数表示将图片显示到哪里,可以是空的屏幕,也可以是一张图片上;第四个参数表示屏幕的XY坐标到WH之内的范围。

 

现在,我们将apply_surface函数修改成下面的形式:

 

/*显示函数*/

 

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination ,SDL_Rect* clip = NULL  )

{

    //建立一个暂时的矩形存储源图象的一部分

SDL_Rect offset;

  //得到矩形的坐标

 offset.x = x;

 offset.y = y;

//显示图象

 SDL_BlitSurface( source, clip, destination, &offset );

}

在这个函数中,我们主要就是添加了参数SDL_Rect* clip

在主函数中,添加一个新的参数:

SDL_Rect clip;

然后在游戏循环中设置这个新的参数,如下:

clip.x=x;

 clip.y=y;

 clip.w=640;

 clip.h=480;

 

我们在这里将图象的显示坐标设置成变量XY,主要是我们想通过前面学习的键盘操作来控制图象的显示位置。图象显示的范围为从XYWH

然后就可以显示它了:

apply_surface(0,0,demo,screen,&clip);

最后得到的显示结果如下图:

 

 

 

阅读(1406) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~