Python Pygame 透明显示为黑色

Python Pygame Trasparency showing as black

我正在尝试在 Surface 顶部使用透明胶片与地图的其余部分一起 blit 图像。 (这是第二层。)当我 blit 它时,它显示为黑色的透明度。有没有办法来解决这个问题。我包含了与之相关的代码。

lily_tex = spritesheet.get_sprite(1, 4).convert_alpha()

这从精灵中获取图像sheet。

    img = pygame.Surface((self.tilesize, self.tilesize))
    img.blit(self.img, (0, 0), (x, y, self.tilesize, self.tilesize))
    return img.convert()

这就是从精灵中提取它的原因 sheet。 下面是将其 blits 到表面以 blits 到屏幕缓冲区的内容。

def create_map(self):
    for map_data in self.map_data:
        for row in range(len(map_data)):
            for column in range(len(map_data[row])):
                if map_data[row][column] == 0:
                    continue
                texture = self.key.get(map_data[row][column])
                self.map_img.blit(texture, (column * self.tilesize, row * self.tilesize))

谢谢

当您调用 convert() 时,图像的像素格式已更改。如果图像格式具有 per alpha 像素,则此信息将丢失。

使用convert_alpha()代替convert():

return img.convert()

return img.convert_alpha()

如果图像没有每像素 alpha 格式,您必须使用 set_colorkey():

设置透明色键
img = pygame.Surface((self.tilesize, self.tilesize))
img.blit(self.img, (0, 0), (x, y, self.tilesize, self.tilesize))
img.set_colorkey((0, 0, 0))

或者,您可以使用 SRCALPHA 标志创建每个像素 alpha 格式的表面:

img = pygame.Surface((self.tilesize, self.tilesize), pygame.SRCALPHA)
img.blit(self.img, (0, 0), (x, y, self.tilesize, self.tilesize))