首页 > 解决方案 > Pygame如何在不擦除其他任何内容的情况下更改背景颜色

问题描述

我正在用 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()

最好有一个功能,但任何解决方案都可以。

标签: pythonpygamebackground

解决方案


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

为形状创建类。例如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()

推荐阅读