【问题标题】:make background of sprite transparent in SDL在 SDL 中使精灵的背景透明
【发布时间】:2019-03-21 02:28:15
【问题描述】:

如何在将精灵加载到 SDL_Surface 后通过更改 alpha 将精灵的背景颜色更改为透明。 SDL 中是否有任何函数使用填充类型的算法并将具有给定颜色的所有像素更改为外部透明。如果使用相同的颜色,我不希望它发生在精灵的边框内。

示例图片:

我想在使用 SDL_BlitSurface 在窗口表面上对它进行 blit 之前将背景蓝色设为透明。

【问题讨论】:

  • 我认为您可以使用 SDL_SetColorKey() - wiki.libsdl.org/SDL_SetColorKey 执行此操作,但我不知道具体该怎么做,而且文档也没有定论。
  • SDL_SetColorKey() 如果背景颜色未包含在我的任何精灵的调色板中,则有效。我认为我的大多数精灵都没有它,对于那些有的,我会改变一个小的值并使用它。
  • 您不能只编辑基础图像以具有 alpha 通道和透明背景吗?
  • 你不能“离线”更改或复制和替换图像吗(即:在开发过程中,而不是在游戏中)?

标签: c++ c sdl


【解决方案1】:

这里只有一个颜色键 (SDL_SetColorKey()) 或完整的 Alpha 通道可以为您提供帮助。

请注意,如果您使用 PNG 等格式,则可以在源图形中提供 Alpha 通道。如果您只是有时需要/想要 Alpha,则在源图形中提供 Alpha 通道,并使用 SDL_SetSurfaceBlendMode()SDL_BLENDMODE_NONE 进行混合而不使用 Alpha,并使用 SDL_BLENDMODE_BLEND 进行混合。

SDL_SurfaceSDL_Texture 都支持 SDL_BlendMode

即使 SDL 提供了另一种方法,例如您提到的填充。你不会想用那个。这是更困难、更昂贵和不必要的开销。您应该在这里坚持最佳做法。

您可能需要查看 SDL_TextureSDL_Renderer 并切换到使用“纹理图集”而不是为每个图像使用单独的表面/纹理以最大限度地提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多