在PyGam中混合peralpha和颜色键的方法

2024-05-16 13:36:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图写一个函数来生成一个曲面,它可以叠加我画的两个png,并且可以在其中一个上打洞,这样另一个就可以看出来了。在

我有一张宇宙飞船的外观图。 (自我起源)在

我还有一张同一艘飞船内部的图纸。 (self.baseImage)在

我还有一张损坏图。 (pygame.image.load('Damage1.png'))

损伤图是一个png,边缘是每像素的alpha透明度,中心是越来越不透明的黄色和橙色,中间是紫色。('#770777')

我们的想法是把损坏的物体直接打到飞船的外部。看起来就像有人朝一艘装满紫色的飞船开了一个洞。那部分很管用。然后我想为紫色设置一个颜色键,然后把整个东西都放在室内图纸上,这样你就可以看到里面的东西了,而不是紫色。在

这是我的尝试。每当受到新的伤害时,它就会运行,而且大部分都能工作,但是紫色不会转换。在

def generateImage(self):
    self.buildImage = self.origImage.copy()
    for x in range(len(self.objectSquares)):
        for y in range(len(self.objectSquares[x])):
            if self.objectSquares[x][y].health < 10:
                self.buildImage.blit(pygame.image.load('Damage1.png'), ((x*10), (y*10)))


    self.buildImage = self.buildImage.convert()
    self.buildImage.set_colorkey(pygame.Color('#770777'))
    self.compImage = pygame.Surface(self.buildImage.get_size()).convert()
    self.compImage.blit(self.baseImage, (0, 0))
    self.compImage.blit(self.buildImage, (0, 0))

我还试着从损伤图中抓取colorkey,以确保不是我的绘画程序压缩了图像或其他东西。在

^{pr2}$

以及

self.buildImage.set_colorkey(pygame.image.load('Damage1.png').get_at((5, 5)))

以及其他各种组合。在

有人看到我做错什么了吗?谢谢你的帮助!在


Tags: imageselfpngloadpygame紫色blit图纸
1条回答
网友
1楼 · 发布于 2024-05-16 13:36:19

来自文档:set_colorkey()

The colorkey will be ignored if the Surface is formatted to use per pixel alpha values. The colorkey can be mixed with the full Surface alpha value.

尝试使用convert_alpha()并在与颜色键匹配时手动将每像素值设置为alpha。在

pygame.transform.threshold()可能会帮你做第二部分。在

相关问题 更多 >