SDL_SetColorKey选择性透明度!?

时间:2015-04-17 22:57:19

标签: c++ image sdl transparency

所以我正在制作这个小小的Mario esque游戏,当我在云中加载背景时,其中一个加载完美,看起来很棒。另一个云加载但具有渐变背景,这类似于背景图像缩小。以下是我非常确定您需要的代码,但如果需要可以提供更多代码。

cloud1 = load("assets/cloud1.png");
cloud2 = load("assets/cloud2.png");

cloud2->format->Amask = 0xFF000000;
cloud2->format->Ashift = 24;

SDL_SetColorKey(cloud1, SDL_TRUE,SDL_MapRGB(screen->format,0xff,0xff,0xff));
SDL_BlitSurface(cloud1, NULL,screen,&cloudd);
SDL_SetColorKey(cloud2, SDL_TRUE,SDL_MapRGB(screen->format,0xff,0xff,0xff));
SDL_BlitSurface(cloud2, NULL,screen,&cloud);

一切都在编译,问题在于我希望第二个云具有透明背景。两个图像文件都具有透明背景。 :(

1 个答案:

答案 0 :(得分:1)

您应该决定使用逐像素透明度还是使用颜色键透明度。 AFAIK,你不能同时使用SDL_Surfaces。如果您想使用颜色键控,请确保PNG文件没有Alpha通道(或者在您喜欢的编辑器中将其删除)。

另外,请勿覆盖曲面格式数据中的值(例如Amask和Ashift)。

在云的透明区域中看到奇怪图像的一个可能原因是,如果您通过重新缩放另一个图像并使用橡皮擦工具来清除它来创建图像。您可以保留旧的颜色数据,但将alpha值设置为0.是的,我知道,因为我之前已经这样做了。