很多教程都讲过SDL如何在窗口上显示图片,但是没怎么说明图片在窗口上显示时,可以设置图片的大小和显示的位置(可能是我自己没搜到的原因吧),所以就有了写这一篇文章的原因。下面就来聊聊如何设置吧。
首先得了解:
SDL_Rect{
int x,
int y,
int w,
int h
}
其中x,y是左上角的坐标,w,h是矩形宽度与大小。单独拿出来理解的话就理解成一个小矩形。
现在就步入正题:位置和大小的设置。
图像在窗口上的显示有两种方式:
第一种:
int SDL_BlitSurface(SDL_Surface* src,
const SDL_Rect* srcrect,
SDL_Surface* dst,
SDL_Rect* dstrect)
其中srcrect.x与y控制了图片的截取的坐标,w,h表示截取图片大小。(我对于其中rect的理解是,在你引入的图片src画上一个坐标为x,y大小的w,h的矩形截取其中的内容)。dstrect.x与y控制了截取的图片在窗口上安放的位置,在窗口上的大小则与srcrect的w,h大小有关(dstrect的w,h改变数值没有影响,我认为是dstrect的w,h在函数中是等于strect的w,h(因为没有去看该函数的源码可能理解有错误))
第二种
int SDL_RenderCopy(SDL_Renderer * renderer,
SDL_Texture * texture,
const SDL_Rect * srcrect,
const SDL_Rect * dstrect);
其中srcrect的理解与上文一样,dstrect则是多了w,h控制在在窗口上的大小。
附加:说两种如何初始化或者窗口上的图片的方法:
1.
int SDL_FillRect(SDL_Surface * dst, const SDL_Rect * rect, Uint32 color);
这里的rect就使用NULL代表整个屏幕,color用0x颜色码。
2.
int SDL_SetRenderDrawColor(SDL_Renderer * renderer,
Uint8 r, Uint8 g, Uint8 b,
Uint8 a);
int SDL_RenderClear(SDL_Renderer * renderer);
第一个函数表示设置画笔的颜色与透明度,其中rgb就是RGB码,a代表透明度,用0就好了;第二个函数就表示用什么画笔去清理窗口.。(单纯理解为设置一个颜色,然后用这个颜色去填充窗口就好了)。
题外:这是本人第一次写文章,写得挺(就不说了),然后也没有附上什么代码,毕竟看了后不自己去实践,马上会忘记的,主要是一个很简单的功能写出来代码比较长,浪费时间去看,自己去试一试就知道功能了(单纯懒罢了我,笑)。如有错误之处,欢迎指正