2013-08-21 19 views
2

因此,我正在嘗試編寫一個函數,該函數生成一個表面,該表面可堆疊兩個我繪製的PNG,並且可以在其中顯示一個孔,以便其他人可以顯示。解決方法在PyGame中混合每個字母和顏色鍵

我有一個太空船外部的繪圖。我也有一個相同的宇宙飛船的內部繪圖。 (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爲確保這不是我的畫圖程序壓縮圖像或東西。

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

你應該嘗試在不同的位置保存到磁盤上的各種圖像,並檢查他們使用普通的圖像編輯器,看看是否透明度是正確的,如果紫色真的是'#770777'(也許它會略有不同因爲alpha級別不是100%不透明)。 –

+0

您是否嘗試過使用'convert_alpha()'而不是'convert()'? – Haz

回答

1

從文檔:set_colorkey()

如果表面被格式化每個像素的α值要使用的色鍵將被忽略。該colorkey可以與完整的表面alpha值混合使用。

嘗試使用convert_alpha()和手動每個像素值設定爲阿爾法當他們符合你的顏色鍵。

pygame.transform.threshold()可能會爲你做第二部分。