Pygame 如何在不擦除任何其他内容的情况下更改背景颜色

Pygame how to change background colour without erasing anything else

我正在 Python 和 Pygame 一起画这幅画。我有绘制圆形和矩形的功能,但我想添加一个功能,让我可以更改背景颜色,同时不擦除其他圆形和矩形。这是矩形的代码:

def drawRect(surface, colour, x, y, w, h):
     pygame.draw.rect(surface, colour, (x, y, w, h))
if event.type == pygame.KEYDOWN:
     if event.key == pygame.K_s:
        #print("pressed")
        drawRect(screen, RANDOM_COLOUR, RANDOM_X, RANDOM_Y, RANDOM_SIZE_X, RANDOM_SIZE_Y)
        pygame.display.flip()

它的功能最好,但任何解决方案都可以。

你不能。您必须在每一帧中重新绘制整个场景。

为形状创建 类。例如RectShape

class RectShape:
    def __init__(self, colour, x, y, w, h):
        self.colour = colour
        self.rect = pygame.Rect(x, y, w, h)
    def draw(self, surface):
        pygame.draw.rect(surface, self.colour, self.rect)

将形状添加到列表中。用你想要的颜色清除背景,绘制列表中的所有形状,并在每一帧刷新显示:

object_list = []

background_color = pygame.Color('gray')

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_s:
                rect = RectShape(RANDOM_COLOUR, RANDOM_X, RANDOM_Y, RANDOM_SIZE_X, RANDOM_SIZE_Y)
                object_list.append(rect)

    screen.fill(background_color)

    for obj in object_list:
        obj.draw(screen)

    pygame.display.flip()