分类: 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函数的第一个参数表示要显示的图片;第二个参数表示从要显示的图片的X,Y坐标开始到W,H之内的范围;第三个参数表示将图片显示到哪里,可以是空的屏幕,也可以是一张图片上;第四个参数表示屏幕的X,Y坐标到W,H之内的范围。 现在,我们将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; 我们在这里将图象的显示坐标设置成变量X,Y,主要是我们想通过前面学习的键盘操作来控制图象的显示位置。图象显示的范围为从X,Y到W,H。 然后就可以显示它了: apply_surface(0,0,demo,screen,&clip); 最后得到的显示结果如下图:
|
|