You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDL SetRenderDrawColor透明度失效问题求助

SDL_SetRenderDrawColor透明度不生效的解决办法

你遇到的问题是调用SDL_SetRenderDrawColor设置alpha参数(比如30、0)后,绘制的矩形始终完全不透明——这是因为SDL渲染器默认关闭了混合功能,alpha通道不会被处理。

解决步骤:

在绘制带透明度的图形前,调用SDL_SetRenderDrawBlendMode开启混合模式,指定SDL_BLENDMODE_BLEND即可让alpha值生效。

修改后的代码示例:

void display_end_menu(SDL_Renderer *renderer) { 
    // 开启混合模式,让alpha通道生效
    SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);

    if (SDL_SetRenderDrawColor(renderer, 0, 255, 0, 30) != 0) {
        return_error("Impossible de modifier la couleur du render"); 
        SDL_Quit(); 
    }

    SDL_Rect shadow_screen; 
    shadow_screen.w = 1280; 
    shadow_screen.h = 720; 
    shadow_screen.x = (SCREEN_WIDTH - shadow_screen.w)/2; 
    shadow_screen.y = (SCREEN_HEIGHT - shadow_screen.h)/2;

    if (SDL_RenderFillRect(renderer, &shadow_screen) != 0) {
        return_error("Impossible de dessiner le rectangle dans le render"); 
        SDL_Quit(); 
    }

    if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 30) != 0) {
        return_error("Impossible de modifier la couleur du render"); 
        SDL_Quit(); 
    }
    SDL_Rect quit_button; 
    quit_button.w = 200; 
    quit_button.h = 50; 
    quit_button.x = (SCREEN_WIDTH - quit_button.w)/2; 
    quit_button.y = (SCREEN_HEIGHT - quit_button.h)/2;

    if (SDL_RenderFillRect(renderer, &quit_button) != 0) {
        return_error("Impossible de dessiner le rectangle dans le render"); 
        SDL_Quit(); 
    }
}  

补充说明:

  • SDL_BLENDMODE_BLEND是最常用的混合模式,它会将当前绘制颜色的alpha值与目标区域的像素颜色进行混合,实现自然的半透明效果。
  • 如果后续需要绘制不透明图形,可以调用SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE)关闭混合,提升渲染效率。

内容的提问来源于stack exchange,提问作者NoCodeGamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:55:37