Pygame: how to change background color
Answer a question
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()
I'm trying to ask the user what background color he would like to have. If the user writes red, the color doesn't change and still stays white.
Answers
In fact, screen.fill(red) changes the color of the pixels in the Surface object screen. You need to update the display after changing the color.
Note, however, that you should only update the display once at the end of the application loop. Multiple updates to the display per frame cause flickering. See also Why is the PyGame animation is flickering.
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()
Explanation:
You are actually drawing on a Surface object. If you draw on the Surface associated to the PyGame display, this is not immediately visible in the display. The changes become visibel, when the display is updated with either pygame.display.update() or pygame.display.flip().
See pygame.display.flip():
This will update the contents of the entire display.
While pygame.display.flip() will update the contents of the entire display, pygame.display.update() allows updating only a portion of the screen to updated, instead of the entire area. pygame.display.update() is an optimized version of pygame.display.flip() for software displays, but doesn't work for hardware accelerated displays.
更多推荐

所有评论(0)