2014-03-30 72 views
0

我正在使用SDL庫進行遊戲,並且遇到與精靈背景有關的問題。SDL透明精靈正方形

我有這個功能負荷的形象:

SDL_Surface *loadImage(std::string path) { 
    SDL_Surface *image = NULL; 
    SDL_Surface *optimizedImage = NULL; 

    image = IMG_Load(path.c_str()); 

    if (image) { 
    optimizedImage = SDL_DisplayFormat(image); 
    SDL_FreeSurface(image); 
    } 

    return optimizedImage; 
} 

當我加載精靈

image = sdlf::loadImage("images/image_sprites.jpg"); 

他們都有他們周圍的廣場

for exsample

循環內

sdlf::apply_surface(0, 0, image, screen, subj.getClipRun(i)); 

有誰知道如何擺脫這些廣場?

我們是否需要爲此目標使用SDL_SetColorKey函數?

+0

你使用JPEG圖像作爲精靈?他們不支持透明度。您應該使用支持透明度的png圖像,並且SDL也可以處理它們。如果您確實想使用jpeg圖像,則需要定義一個顏色鍵。那個顏色的像素將是透明的。 – Emil

+0

非常感謝您的建議 –

回答

0

製作遊戲藝術時請勿使用JPEG,否則會使圖像變差並使其看起來更糟。請使用如BMP(或PNG如果您想節省空間)的格式。如果精靈的顏色少於256種(又稱8位圖像),則可以使用GIF圖像。

如果你堅持使用JPEG圖像,那麼你必須使用SDL_SetColorKey()

0

不要使用JPG文件!

您可以使用「SDL_image 2」來處理png文件或只使用位圖。

爲了使用彩色鍵,只需添加

SDL_SetColorKey(圖像,SDL_TRUE,SDL_MapRGB(圖像 - >格式,0,0xFF時,爲0xFF)); (我用青色這裏)

因此,這將是這樣的:

SDL_Surface *loadImage(std::string path) { 
    SDL_Surface *image = NULL; 
    SDL_Surface *optimizedImage = NULL; 

    image = IMG_Load(path.c_str()); 

    SDL_SetColorKey(image, SDL_TRUE, SDL_MapRGB(image->format, 0, 0xFF, 0xFF)); 

    if (image) { 
    optimizedImage = SDL_DisplayFormat(image); 
    SDL_FreeSurface(image); 
    } 

    return optimizedImage; 
}