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); 最后得到的显示结果如下图:
|
|
关于更多内容请访问金桥科普网站( http://popul.jqcq.com )游戏开发栏目,如你需要游戏开发方面的书籍请参考金桥书城游戏频道(http://book.jqcq.com/category/1_70_740.html )。 如果你在阅读本篇文章时有什么好的建议请来信给我,我的E_mail: akinggw@126.com. 如果你在使用SDL时有什么问题,请到金桥科普网站(http://popul.jqcq.com )游戏开发栏目,我将详细地为你解答。
接下来,我可能会讲解一点我学习网络引擎Raknet的一些心得,谢谢关注! |