2016-08-13 188 views
1

我想在彈出新表面之前將當前屏幕變暗一點。我知道在pygame中沒有這樣做的功能,而且我將不得不處理圖像以使其變暗。但只要我知道在pygame中獲取當前顯示錶面的唯一方法就是將其作爲一個文件保存到磁盤,從而減慢遊戲速度。有沒有其他方法可以用pygame做到這一點?就像將圖像保存到內存中的值,以便我可以在不保存某處的情況下處理它。pygame-如何變暗屏幕

由於提前,

斯塔姆

回答

2

你不需要任何東西保存到一個文件。 當您將圖像讀入文件時,它是一個Surface對象。你他們將這個物體閃光到屏幕上。但是這些Surface對象的方法和屬性與作爲屏幕的對象相同 - (它也是一個Surface):您可以繪製圖元,並將其他圖像傳送給它們 - 所有這些都在內存中。

所以,一旦你讀了你的圖像,只需製作一個副本,繪製一個實心透明顏色的填充矩形使其變暗,然後將其投影到屏幕上。重複該過程,增加透明度級別,如果要淡入淡出效果,請將其粘貼到屏幕上。

import pygame 
screen = pygame.display.set_mode((640,480)) 
img = pygame.image.load("MYIMAGE.PNG") 

for opacity in range(255, 0, -15): 
    work_img = img.copy() 
    pygame.draw.rect(work_img, (255,0, 0, opacity), (0,0, 640,480)) 
    screen.blit(work_img, (0,0)) 
    pygame.display.flip() 
    pygame.time.delay(100) 
+0

可能我沒有說清楚了,我想變黑就是我的比賽已經被blit屏幕... –

+0

哦,我得到了你的觀點,在屏幕上繪製另一個圖像將變暗 –

+0

暗什麼已經是顯示,只需在屏幕上繪製一個半透明的矩形:將填充顏色傳遞給第四個「alpha」組件以表示不透明度。 – jsbueno