这可能是相当简单的问题,但经过一个小时的搜索和尝试我仍然没有解决它。 我有两个 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/