我正在加載PNG文件(帶有一些透明的地方)到我的SDL應用程序中。SDL_image PNG透明度錯誤
谷歌搜索如何做這個代碼示例爲我提供了:
SDL_Surface *LoadImage(std::string filename)
{
SDL_Surface* loaded_image = 0, compatible_image = 0;
if (!filename.c_str())
return 0;
loaded_image = IMG_Load(filename.c_str());
if (!loaded_image)
return 0;
compatible_image = SDL_DisplayFormat(loaded_image);
SDL_FreeSurface(loaded_image);
return compatible_image;
}
但在達到行compatible_image = SDL_DisplayFormat(loaded_image);
時,應用程序與一個不可捕獲的異常中止(甚至try { /* ... */ } catch (...) { /* ... */ }
沒有幫助)。用SDL_DisplayFormatAlpha()
代替SDL_DisplayFormat()
也沒有幫助。所以,我只是刪除了異常trowable線和得到這個代碼的工作載入圖像:
SDL_Surface *LoadImage(std::string filename)
{
if (!filename.c_str())
return 0;
return IMG_Load(filename.c_str());
}
,我已經發現了這樣不愉快的事情:當一些精靈與另一個的透明片重疊,文物出現。事情是這樣的:
我動畫我的 「英雄」 這個簡單的算法:
// SDL_Surface sprite = LoadImage("hero.bmp");
// hero.bmp contains animation frames followed one-by-one in a single line
// spriteFrameCnt is a number of animation frames
// spriteWidth and spriteHeight contain single frame params
SDL_Rect srcRect;
srcRect.x = spriteFrame * spriteWidth;
srcRect.w = spriteWidth;
srcRect.y = 0;
srcRect.h = spriteHeight;
spriteFrame = ++spriteFrame % spriteFrameCnt;
SDL_BlitSurface(sprite, &srcRect, screen, &rcSprite);
這又如何解釋和解決嗎?
是的,現在不會拋出異常。謝謝你。但是無論我怎麼嘗試,文物都不會消失...... – shybovycha