c++ - SDL 纹理透明背景

标签 c++ visual-c++ sdl sdl-2

这可能是相当简单的问题,但经过一个小时的搜索和尝试我仍然没有解决它。 我有两个 png 文件。第一个是背景图像,第二个是前景图像。前景有一个 Alpha channel 。我想在背景之上显示前景。

我正在使用以下方式加载前台:

SDL_Surface *clip = SDL_CreateRGBSurface(0, SCREEN_WIDTH, SCREEN_HEIGHT, 32, 0, 0, 0, 0xff);
SDL_Rect rect = { x, 0, SCREEN_WIDTH, SCREEN_HEIGHT };
SDL_BlitSurface(map, &rect, clip, NULL);
*block = SDL_CreateTextureFromSurface(gRenderer, clip);

其中 map 是一些 SDL_Surface。

我正在使用以下方式加载背景:

SDL_Surface* loadedSurface = IMG_Load(path);
//Create texture from surface pixels
SDL_Texture* newTexture = SDL_CreateTextureFromSurface(gRenderer, loadedSurface);
SDL_FreeSurface(loadedSurface);

然后我尝试连接它们:

SDL_RenderCopy(gRenderer, background, NULL, &cur);
SDL_RenderCopy(gRenderer, map, NULL, &cur);

但它会导致前景图像具有黑色背景。我做错了什么?

最佳答案

您应该添加这两行,

Uint32 colorkey = SDL_MapRGB(loadedSurface->format, 0, 0, 0);
SDL_SetColorKey(loadedSurface, SDL_TRUE, colorkey);

代码中的此行之前

SDL_Texture* newTexture = SDL_CreateTextureFromSurface(gRenderer, loadedSurface);

关于c++ - SDL 纹理透明背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35554135/

相关文章:

c++ - 霍夫变换后如何只过滤最长的线

c++ - 使用 c++/vC++ 将结构数组和二维数组传递给函数

C++如何上下捕捉鼠标滚轮?

c++ - 这是有效的 C 代码但不是有效的 C++ 代码?

c++ - 将参数从 C++ 中的 DLL 传递给函数

c++ - 如何解释 int 中分配的 float 内存来模拟乘法?

MFC 中的 C++ UTF-8/ASCII 到 UTF-16

C++ 和 SDL : Why can't I compile this program?

c++ - 两个线程访问单例类 - 无法正常工作

c++ - SDL 不检测箭头键