c++ - SDL_SetColorKey 选择性透明!?

标签 c++ image sdl transparency

所以我正在制作这款马里奥风格的小游戏,当我加载云作为背景时,其中一个加载完美并且看起来很棒。另一个云加载但具有渐变背景,这看起来像是缩小的背景图像。这是我很确定你需要的所有代码,但如果需要的话会放更多。

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/

相关文章:

css - 垂直居中翻转图像?

c++ - 将 SDL_PeepEvents 从 SDL 1.2.14 迁移到 SDL 1.3

c++ - 如果我只需要它在其他线程中的值,我是否应该在一个线程中锁定一个变量,如果我不这样做,为什么它会起作用?

c++ - 创造向外螺旋

c++ - 旧 Mac OS 的 C 编译器下 '\n' 的值是多少?

c++ - 为什么 C++ 的 void 类型只是三心二意的单元类型?

c# - 将图像导入为资源后,参数 docData 必须实现接口(interface) IVsTextStream ERROR

r - 如何将外部图像加载到 Shiny

xcode - SDL_mixer.h发生了什么?

c++ - 编译发布