所以我正在尝试编写一个函数,该函数生成一个表面,该表面堆叠了我绘制的两个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)))
以及其他各种组合。
有谁看到我做错了什么?我很感激帮助!
答案 0 :(得分:1)
来自文档:set_colorkey()
如果将Surface格式化为使用每像素alpha值,则会忽略colorkey。 colorkey可以与完整的Surface alpha值混合使用。
尝试使用convert_alpha()
并在匹配颜色键时手动将每像素值设置为alpha。
pygame.transform.threshold()可能会为你做第二部分。