我试图在地图的剩余部分上方放置一张带有透明度的图像(这是第二层)。当我执行blit操作时,它会以黑色显示透明度。请问有没有办法解决这个问题?下面是相关代码。
lily_tex = spritesheet.get_sprite(1, 4).convert_alpha()
获取精灵表中的图像。
img = pygame.Surface((self.tilesize, self.tilesize))
img.blit(self.img, (0, 0), (x, y, self.tilesize, self.tilesize))
return img.convert()
这是从精灵表中提取它的方式。 以下是将其blit到表面以供blit到屏幕缓冲区的方法。
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))
感谢您。
return img.convert()
替换为return img.convert_alpha()
。但是,如果您已经对self.img
进行了convert()
,则不需要转换 blit 产生的图像/表面。再次进行convert()
可能会删除在原始convert_alpha()
中保留的 alpha 值。 - Glenn Mackintoshimg = pygame.Surface((self.tilesize, self.tilesize), pygame.SRCALPHA)
。 这将创建一个带有α通道的Surface。 - Kingsleyconvert_alpha()
并在其他地方看到需要添加img.setcolorkey((0, 0, 0))
,因为那是图像背景的颜色。我认为它需要这样做是因为图像可能使用黑色来显示透明度。在文件浏览器中查看图像时,有时会变成黑色。带有 alpha 通道的 surface 可能有效,但我认为这是图像问题,而不是 pygame 的问题。 - Some Goose