2014-08-30 178 views
0

我想爲我的遊戲添加一個背景圖片,並且我需要某些不透明度。我用表面的方法set_alpha()來控制其半透明度。但是,這會創建淡入效果,並且最終背景在設置不透明度時最終轉爲完全亮度。有什麼方法可以將背景的半透明度設置爲恆定值?爲背景設置常量半透明

我的代碼是

self.bg = pygame.image.load("../game_images/background.png") 
self.bg_size = self.bg.get_size() 
self.bg_rect = self.bg.get_rect() 
self.bg.set_alpha(5) 
self.screen = pygame.display.set_mode(self.bg_size,pygame.FULLSCREEN) 
self.screen.blit(self.bg, self.bg_rect) 
pygame.display.update() 

如何做到這一點的任何提示?

+0

這不應該創建淡入效果。你能提供一個獨立的例子嗎? – sinan 2014-08-30 11:00:40

+0

@sinan你是對的。這不會產生這樣的效果。但是我寫的那段代碼是在一個循環中被調用的函數中,這是導致問題的原因。我以前不知道。非常感謝你:) – BrownBeast 2014-08-31 15:07:28

回答

0

這將有助於看到遊戲循環。

您的圖像可能變得越來越亮,因爲您在重畫之前未清除屏幕。

screen.fill((0,0,0)) 
screen.blit(self.bg, self.bg_rect) 
pygame.display.update() 

如果你決定做一個self.bg.convert_alpha()。然後你需要使用pygame.surfarray.pixels_alpha(),這需要numpy來安裝。

# value is a float .01 to .99 
def set_alpha(image, value): 
    array = pygame.surfarray.pixels_alpha(image) 
    for x in xrange(array.shape[0]): 
     for y in xrange(array.shape[1]): 
      array[x][y] = int(array[x][y] * value) 
+0

你的解決方案可以在重畫之前清除屏幕!但是我現在有一個相關的問題。如果我每次都清除屏幕,前景也會變成空白,看起來好像它眨了眨眼睛。我該如何糾正這一點? – BrownBeast 2014-08-31 14:58:41

+0

沒關係,明白了。剛剛從循環中刪除了這段代碼 – BrownBeast 2014-08-31 15:05:37