解决方法在PyGame中混合每个alpha和颜色键

时间:2013-08-21 04:30:42

标签: python graphics transparency pygame 2d-games

所以我正在尝试编写一个函数,该函数生成一个表面,该表面堆叠了我绘制的两个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)))

以及其他各种组合。

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

1 个答案:

答案 0 :(得分:1)

来自文档:set_colorkey()

  
    
      

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

    
  

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

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