作者:龙飞
这两天下雨,所以就暂停了寻春的步伐,多写了点教程。绵阳的春天是美丽的,大家学习和写程序之余,还是应该多看看大自然。给大家推荐我拍的风景照啦,呵呵。http://picasaweb.google.com/firefly.cao
因为不想多上传图片,所以我的例子中的图片文件直接就用Lazy Foo's教程中的附件了。相关资源,大家可以在这里下载:Clip Blitting and Sprite Sheets
1.1:什么是精灵?
如果有很多很多的图片,不想发布游戏的时候包含n多小小的图片文件,那么可以考虑把小图片都画在一张大图上,然后“抠”下来用,不也是很方便吗?这张大图就叫精灵图(Sprite sheet)。每一个抠下来的图片就叫精灵啦。
精灵只是一种技巧,需要的知识,我们前面都已经学习过了。我们稍微修改一下类,就可以很好的演示这个技术实现。
1.2:填充背景的颜色
int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color);
这个函数是往一个指定surface的指定矩形区域中填充指定的颜色。如果指定矩形区域为空指针,则填充整个surface。值得注意的是,SDL_Surface结构中包含矩形区域的只读成员数据是clip_rect。我们为ScreenSurface类增加一个方法,默认填充黑色。
class ScreenSurface
{
private:
//
public:
//
void fillColor(Uint8 r = 0, Uint8 g = 0, Uint8 b = 0) const;
};
实现为:
void ScreenSurface::fillColor(Uint8 r, Uint8 g, Uint8 b) const
{
if ( SDL_FillRect(pScreen, 0, SDL_MapRGB(pScreen->format, r, g, b)) < 0 )
throw ErrorInfo(SDL_GetError());
}
1.3:思路
我们先创建一个ScreenSurface对象,并将其填充为白色作为背景。装载精灵图之后,先抠掉精灵图的背景色,然后按照区域,分4次将4个图片小精灵blit到背景上。非常简单!需要说明的是,我修改了局部blit()方法偏移值的默认参数值。因为在之前的章节中,局部blit()主要用于blit部分背景将背景“搽干净”,需要将偏移设为非零;而我们现在使用这个方法的主要目的是抠精灵图片,如果偏移非零的话就会把设定范围之外的图像也抠过来,而这不是我们希望发生的。下节给出完整源代码。
posted on 2008-03-20 12:36
lf426 阅读(3187)
评论(0) 编辑 收藏 引用 所属分类:
SDL入门教程