作者:龍飛
這兩天下雨,所以就暫停了尋春的步伐,多寫了點教程。
綿陽的春天是美麗的,大家學(xué)習(xí)和寫程序之余,還是應(yīng)該多看看大自然。給大家推薦我拍的風(fēng)景照啦,呵呵。http://picasaweb.google.com/firefly.cao
因為不想多上傳圖片,所以我的例子中的圖片文件直接就用Lazy Foo's教程中的附件了。相關(guān)資源,大家可以在這里下載:Clip Blitting and Sprite Sheets
1.1:什么是精靈?
如果有很多很多的圖片,不想發(fā)布游戲的時候包含n多小小的圖片文件,那么可以考慮把小圖片都畫在一張大圖上,然后“摳”下來用,不也是很方便嗎?這張大圖就叫精靈圖(Sprite sheet)。每一個摳下來的圖片就叫精靈啦。
精靈只是一種技巧,需要的知識,我們前面都已經(jīng)學(xué)習(xí)過了。我們稍微修改一下類,就可以很好的演示這個技術(shù)實現(xiàn)。
1.2:填充背景的顏色
int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color);
這個函數(shù)是往一個指定surface的指定矩形區(qū)域中填充指定的顏色。如果指定矩形區(qū)域為空指針,則填充整個surface。值得注意的是,SDL_Surface結(jié)構(gòu)中包含矩形區(qū)域的只讀成員數(shù)據(jù)是clip_rect。我們?yōu)镾creenSurface類增加一個方法,默認(rèn)填充黑色。
class ScreenSurface
{
private:
//
public:
//
void fillColor(Uint8 r = 0, Uint8 g = 0, Uint8 b = 0) const;
};
實現(xiàn)為:
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:思路
我們先創(chuàng)建一個ScreenSurface對象,并將其填充為白色作為背景。裝載精靈圖之后,先摳掉精靈圖的背景色,然后按照區(qū)域,分4次將4個圖片小精靈blit到背景上。非常簡單!需要說明的是,我修改了局部blit()方法偏移值的默認(rèn)參數(shù)值。因為在之前的章節(jié)中,局部blit()主要用于blit部分背景將背景“搽干凈”,需要將偏移設(shè)為非零;而我們現(xiàn)在使用這個方法的主要目的是摳精靈圖片,如果偏移非零的話就會把設(shè)定范圍之外的圖像也摳過來,而這不是我們希望發(fā)生的。下節(jié)給出完整源代碼。
posted on 2008-03-20 12:36
lf426 閱讀(3228)
評論(0) 編輯 收藏 引用 所屬分類:
SDL入門教程