我想在弹出新曲面之前稍微改变当前屏幕的颜色。我知道pygame中没有这样做的功能,我必须处理图像才能使它变暗。但只要我知道在pygame中获取当前显示表面的唯一方法是将其作为文件保存到磁盘,从而减慢游戏速度。用pygame还有其他办法吗?就像将图像保存到内存中的值一样,这样我就可以处理它而不将其保存在某个地方。
提前致谢,
斯塔姆
答案 0 :(得分:2)
您不需要将任何内容保存到文件中。
当您将图像读取到文件时,它是Surface
对象。他们将这个对象blit到屏幕上。但是这些Surface
对象具有与作为屏幕的对象相同的方法和属性 - (也是一个Surface):您可以绘制基元,并将其他图像blit到它们 - 全部都在内存中。
因此,一旦您阅读了图像,只需复制它,在其上绘制一个带有实心透明色的填充矩形,使其变暗,然后将其blit到屏幕上。如果您想要淡入效果,请重复此过程以提高透明度级别并再次将其粘贴在屏幕上。
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)