【问题标题】:Transparency issue: SDL_SetTextureBlendMode透明度问题:SDL_SetTextureBlendMode
【发布时间】:2020-03-28 11:57:55
【问题描述】:

我有一个透明背景的 PNG 文件。 Snippet of transparent background

我将其设置为 surface 然后设置为 tex

SDL_Texture* m_Tex = SDL_CreateTextureFromSurface(renderer, surface);

我希望这个纹理具有闪烁效果,所以我将它传递给 setTextureBlendMode 函数

SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND);
Uint8 m_Alpha = 255;

我将使用 m_Alpha 来达到闪烁的目的。我将通过按下特定按钮来激活闪烁。 它工作正常。但是为什么我把它转回SDL_BLENDMODE_NONE后纹理的背景不再透明了:

SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_NONE);

Snippet of not transparent anymore after BLENDMODE_NONE

有没有办法让我的纹理背景再次透明? 我的意思是,经过足够的研究,除了 SDL_SetColorKey 之外,我似乎找不到其他方法。 但是 SDL_SetColorKey 再次需要加载的表面。这只是意味着我将在 surface 上再次设置 PNG 文件,然后在 tex 上设置。我认为每次我希望 tex 停止闪烁时都这样做并不理想。请帮忙。谢谢。

【问题讨论】:

    标签: c++ sdl


    【解决方案1】:

    SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_NONE); 要使用 Alpha != 1 渲染纹理,您需要一些混合模式。

    在混合模式下,您正在向系统描述您希望如何将背景色与前景色合并。

    你可以从这个帖子中得到一个基本的想法。 SDL2: Generate fully transparent texture

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-29
      • 2013-01-24
      • 2013-06-21
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多