测试Demo,但不要以为就可以随意为之,良好的代码风格和设计思想在哪都是需要注意的
大家看到了吧,其中的ScreenSurface的flip方法是将数据化的SDL_Surface Push到屏幕上,让用户看到,而acquire是获取当前的屏幕接口,其他的就是一些构造方法和构析方法。下面的方法都需要传一个ScreenSurface,这样是不是就统一管理了呢?全局就只需创建一个唯一的通向物理屏幕的接口~
工程下多了一个sheet.jpg,这就是今天要用于切割的图片
图片是400 * 400 pixel(像素)
接下来我们要做的工作就是,把这张图切割成4个圆,并且把背景变成透明
说明:博主在SDL_fun.h这个头文件中增加了一个类,用于管理全局唯一的屏幕接口,我的考虑是,screen surface实际上只需要建立一个。并且,其他的surface实际上都是“依赖”于这个surface才能显示出来的。在SDL中,多次SDL_SetVideoMode()的效果实际上是保留了最后一次的surface作为了screen surface,所以,多次SDL_SetVideoMode()其实是没有实际意义的。
01 |
07 |
08 |
#ifndef SDL_FUN_H_ |
09 |
#define SDL_FUN_H_ |
10 |
11 |
#include |
12 |
#include |
13 |
14 |
class ScreenSurface{
|
15 |
16 |
public : |
17 |
ScreenSurface(SDL_Surface* screen); |
18 |
ScreenSurface( int width, int height, int bpp = 32, Uint32 flags = SDL_SWSURFACE); |
19 |
~ScreenSurface( void ); |
20 |
bool flip( void ) const ; |
21 |
SDL_Surface* acquire( void ); |
22 |
23 |
private : |
24 |
SDL_Surface* screen; |
25 |
}; |
26 |
27 |
void drawBitmap(ScreenSurface s, const char * fileName); |
28 |
void readKeyboard(ScreenSurface s); |
29 |
void getRadioInfo(ScreenSurface s); |
30 |
void renderPictures(ScreenSurface s, const char * fgFile, const char * bgFile); |
31 |
void drawClips(ScreenSurface s, const char * file, SDL_Rect* clip = NULL, int size = 0); |
32 |
33 |
#endif |
头文件中的drawClips就是图片分割的方法,下面是它的实现: