2016-08-13 124 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