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

2024-06-23 19:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Pygame用Python制作这个绘图工具。我有画圆和矩形的函数,但我想添加一个函数,使我可以更改背景颜色,同时不删除其他圆和矩形。以下是矩形的代码:

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()

为它设置一个函数是最好的,但任何解决方案都会起作用


Tags: 工具函数event绘图sizeifrandomsurface
1条回答
网友
1楼 · 发布于 2024-06-23 19:40:38

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

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

相关问题 更多 >

    热门问题