我正在尝试获得一个透明的SDL_Surface(在它上面插入半透明的矩形),这就是我所做的:
surface := SDL_CreateRGBSurface(SDL_SWSURFACE, XMAX*TILE_SIZE,
YMAX*TILE_SIZE, BPP, 0, 0, 0, SDL_ALPHA_TRANSPARENT);
SDL_FillRect(surface, nil, SDL_MapRGBA(surface^.format, 0, 0, 0, 0));
这仍然不起作用,我得到的表面是黑色而不是透明。有什么想法吗?
奖励:为了避免多个透明矩形相互叠加,我有什么方法可以移除这些矩形然后再对新的矩形进行blit(没有再次渲染背景......)?
答案 0 :(得分:0)
通过查看docs for SDL_CreateRGBSurface,我认为您需要将SDL_SWSURFACE
替换为SDL_SRCALPHA
。
对于奖金部分,您可能首先尝试使硬件加速工作......但如果这不是一个选项而且您愿意花一些记忆:
首先,在绘制矩形之前,复制下面的像素。
要删除最上面的矩形,只需重新显示存储的背景图像即可。
要删除任何其他矩形,请重新显示其背景,然后从上到下重新绘制其上方矩形的重叠部分。