【问题标题】:How do I draw a transparent or semi-transparent rectangle on top of an opaque one in SDL2?如何在 SDL2 中的不透明矩形之上绘制透明或半透明矩形?
【发布时间】:2016-05-25 17:26:36
【问题描述】:

这是我绘制SDL_Rect对象rectrect2的代码:

#include <iostream>
#include <SDL2/SDL.h>

int main(){
    SDL_Window *window=     SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
    if(window == 0)
        std::cout << SDL_GetError() << std::endl;

    SDL_Renderer *renderer= SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if(renderer == NULL)
        std::cout << SDL_GetError() << std::endl;

    SDL_Rect rect;
    rect.x=     100;
    rect.y=     100;
    rect.w=     100;
    rect.h=     100;

    SDL_Rect rect2;
    rect2.x=    150;
    rect2.y=    150;
    rect2.w=    100;
    rect2.h=    100;

    while(true){
        Uint8 r,g,b,a;

        r=  32;
        g=  32;
        b=  32;
        a=  255;
        if(SDL_SetRenderDrawColor(renderer, r, g, b, a) == -1)
            std::cout << SDL_GetError() << std::endl;
        if(SDL_RenderClear(renderer) == -1)
            std::cout << SDL_GetError() << std::endl;

        r=  255;
        g=  255;
        b=  255;
        a=  255;
        if(SDL_SetRenderDrawColor(renderer, r, g, b, a) == -1)
            std::cout << SDL_GetError() << std::endl;
        if(SDL_RenderFillRect(renderer, &rect) == -1)
            std::cout << SDL_GetError() << std::endl;

        r=  100;
        g=  100;
        b=  100;
        a=  0;
        if(SDL_SetRenderDrawColor(renderer, r, g, b, a) == -1)
            std::cout << SDL_GetError() << std::endl;
        if(SDL_RenderFillRect(renderer, &rect2) == -1)
            std::cout << SDL_GetError() << std::endl;

        SDL_RenderPresent(renderer);
    }

    return 0;
}

虽然我可以将rect 绘制到SDL_Renderer 对象renderer 就好了,但如果我添加rect2,它总是不透明的,阻挡rect 的视图。即使我将rect2 的 alpha 设置为 0,它仍然显示为不透明,将rect 挡在视线之外。

如何解决这个问题,让rect2 更加透明?

【问题讨论】:

标签: c++ sdl render sdl-2 rect


【解决方案1】:

您只需拨打电话
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
在创建渲染器以启用与 RenderDraw 函数的 alpha 混合之后。 (SDL documentation)

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 1970-01-01
    • 2012-06-20
    • 2012-01-16
    • 2016-10-05
    • 2016-03-12
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多