3

因此,我正在尝试编写一个函数,该函数生成一个表面,该表面堆叠了我绘制的两个 png,并且能够在一个中放置孔,以便另一个显示出来。

我有一张宇宙飞船外部的图纸。(self.origImage)

我也有同一个宇宙飞船内部的图纸。(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))

我还尝试从损坏图中抓取颜色键,以确保不是我的绘画程序压缩了图像或其他东西。

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

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

以及其他各种组合。

有谁看到我做错了什么?我会很感激帮助!

4

1 回答 1

1

来自文档:set_colorkey()

如果 Surface 被格式化为使用每个像素的 alpha 值,则颜色键将被忽略。colorkey 可以与完整的 Surface alpha 值混合。

当它们与您的颜色键匹配时,尝试使用convert_alpha()并手动将每像素值设置为 alpha。

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

于 2013-08-21T17:15:32.157 回答