43

有人可以给我一些在pygame中创建具有透明背景的表面的示例代码吗?

4

3 回答 3

47

这应该这样做:

image = pygame.Surface([640,480], pygame.SRCALPHA, 32)
image = image.convert_alpha()

确保颜色深度 (32) 保持明确设置,否则这将不起作用。

于 2008-11-29T22:02:45.563 回答
21

你也可以给它一个颜色键,就像 GIF 文件的透明度一样。这是制作精灵最常用的方法。原位图有原图,并且有某种颜色作为背景,不会被绘制出来,也就是colorkey:

surf.set_colorkey((255,0,255)) // Sets the colorkey to that hideous purple

使用 colorkey 而不是 alpha 的表面更快地进行 blit,因为它们不需要任何混合数学。当 SDL 表面有一个颜色键集时,它使用一个简单的位掩码,这几乎没有开销。

于 2008-12-09T18:24:22.127 回答
3

您有 3 种可能性:

  • 设置一个透明的颜色键set_colorkey()

    color 键指定被视为透明的颜色。例如,如果您有一个应该是透明的黑色背景的图像,请设置一个黑色键:

    my_surface.set_colorkey((0, 0, 0))
    
  • 您可以在创建新曲面时启用其他功能。设置SRCALPHA标志以创建具有包含每像素 alpha 的图像格式的表面。像素的初始值为 (0, 0, 0, 0):

    my_surface = pygame.Surface((width, height), pygame.SRCALPHA)
    
  • 用于convert_alpha()创建具有按像素提供 alpha 的图像格式的Surface副本。

    但是,如果您创建一个新表面并使用convert_alpha(),则 Alpha 通道最初会设置为最大值。像素的初始值为 (0, 0, 0, 255)。您需要用透明颜色填充整个表面,然后才能在其上绘制任何内容:

    my_surface = pygame.Surface((width, height))
    my_surface = my_surface.convert_alpha()
    my_surface.fill((0, 0, 0, 0))
    
于 2020-10-24T11:00:43.663 回答