所以我正在制作这款马里奥风格的小游戏,当我加载云作为背景时,其中一个加载完美并且看起来很棒。另一个云加载但具有渐变背景,这看起来像是缩小的背景图像。这是我很确定你需要的所有代码,但如果需要的话会放更多。
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);
一切都可以编译,问题是我希望第二个云具有透明背景。两个图像文件都有透明背景。 :(
最佳答案
您应该决定是使用逐像素透明度还是颜色键控透明度。 AFAIK,你不能同时使用 SDL_Surfaces。如果您想使用颜色键控,请确保 PNG 文件没有 alpha channel (或者在您喜欢的编辑器中将其删除)。
此外,不要覆盖表面格式数据(例如 Amask 和 Ashift)中的值。
在云的透明区域看到怪异图像的一个可能原因是,如果您通过重新缩放另一个图像创建图像并使用橡皮擦工具将其清除。您可能会保留旧的颜色数据,但将 alpha 值设置为 0。是的,我知道,因为我以前做过。
关于c++ - SDL_SetColorKey 选择性透明!?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29710742/