2014-02-09 54 views
2

我工作的自定義GUI組件pygame的範圍內,並且使滑塊組件的時候,我給滑塊一個Draw(parentSurface)功能借鑑了父表面的滑桿,它的存儲位置。如何使pygame的半透明圖像動態

現在這個工作,但在滑塊存儲兩個圖像:

  • 幻燈片圖像被動態地從瓷磚製成滑塊的給定長度相匹配,具有所述給定長度的寬度測量,和高度的3個像素;和
  • 「選擇」圖像,這只是一個小8×12指示器,以顯示其中的滑塊。

的問題是,當我Draw(parentSurface)我這樣做:

def Draw(self, parsurf): 
    '''draw the element on parsurf at the given location''' 
    w1 = self.slider_img.get_width() 
    h1 = self.slider_img.get_height() 
    w2 = self.select_img.get_width() 
    h2 = self.select_img.get_height() 
    self.image = pygame.Surface((w1, h2 + h1)) 
    self.image = ColorMod.Transparency(self.image, 0) 
    self.image.blit(self.slider_img, (0, self.image.get_height()-h1)) 
    x = self.value/self.conversionratio 
    self.image.blit(self.select_img, (x- w2/2, 0)) 
    if self.debug_on: 
     print "attempting to blit to the given surface" 
    parsurf.blit(self.image, self.loc) 

然而,與在self.image黑色背景的blit。我想這是半透明的,這樣的背景可以顯示通過這裏就沒有什麼self.image。我剛落有self.image,直接繪製self.slider_imgself.select_img父面?

回答

0

你必須使圖像透明在self.image = pyame.Surface調用self.image.set_alpha((0,0,0))你也需要將其更改爲self.image = pygame.Surface((width, height), pygame.SRCALPHA) 我想如果創建Surface對象的self.slider_img名稱是指還建議擺脫self.image = ColorMod.Transparency...

0

動態,當你第一次創建Surface情況下,你應該叫Surface.convert_alpha獲得Surface與每個像素的α值合適的像素格式。然後,您應該能夠根據需要逐個像素地設置Alpha。

http://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert_alpha

+0

至於我的理解去,如果你使用的是Windows它的工作原理,但是,如果你正在使用Ubuntu使用'Surface.convert_alpha()(沒有嘗試過其他的Linux操作系統)'不工作。 – KodyVanRy