Pygame:如何更改背景颜色

use*_*944 9 python pygame python-3.x

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([800,600])
white = [255, 255, 255]
red = [255, 0, 0]
screen.fill(white)
pygame.display.set_caption("My program")
pygame.display.flip()



background = input("What color would you like?: ")
if background == "red":
    screen.fill(red)

running = True
while running:
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
        running = False
        pygame.quit()
Run Code Online (Sandbox Code Playgroud)

我试图询问用户他想要什么背景颜色。如果用户写红色,颜色不会改变并且仍然保持白色。

e0k*_*e0k 14

下次更新显示时,它将重绘为红色。添加pygame.display.update()

background = input("What color would you like?: ")
if background == "red":
    screen.fill(red)
    pygame.display.update()
Run Code Online (Sandbox Code Playgroud)

或者,您可以pygame.display.flip()在(有条件地)更改背景颜色后移动to。

另请参阅pygame.display.update 和 pygame.display.flip 之间的区别


Rab*_*d76 2

实际上,改变了Surface对象screen.fill(red)中像素的颜色。更改颜色后需要更新显示。 但请注意,您应该仅在应用程序循环结束时更新显示一次。每帧显示的多次更新会导致闪烁。另请参见为什么 PyGame 动画闪烁screen

backcolor = white
if background == "red":
    backcolor = red

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

    # clear background
    screen.fill(backcolor)

    # draw scene
    # [...]

    # update display
    pygame.display.flip() 
Run Code Online (Sandbox Code Playgroud)

解释:

您实际上是在一个物体上绘图Surface。如果您在与 PyGame 显示关联的Surface上绘图,则这不会立即在显示中可见。pygame.display.update()当使用或更新显示时,更改变得可见pygame.display.flip()

pygame.display.flip()

这将更新整个显示的内容。

虽然pygame.display.flip()会更新整个显示的内容,但pygame.display.update()允许仅更新屏幕的一部分,而不是整个区域。pygame.display.update()是针对软件显示的优化版本pygame.display.flip(),但不适用于硬件加速显示。