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()
我试图询问用户他想要的背景颜色。如果用户写入红色,则颜色不会改变,仍然保持白色。
答案 0 :(得分:3)
下次更新显示时,它将重绘为红色。添加pygame.display.update()
:
background = input("What color would you like?: ")
if background == "red":
screen.fill(red)
pygame.display.update()
或者,您可以在{有条件地]更改背景颜色后移动pygame.display.flip()
。
另见Difference between pygame.display.update and pygame.display.flip
答案 1 :(得分:0)
创建一个变量来存储当前颜色:
currentColor = (255,255,255) # or 'white', since you created that value
background = input("What color would you like?: ")
if background == "red":
currentColor = red # The current color is now red
在循环中:
while running:
for i in pygame.event.get():
if i.type == pygame.QUIT:
running = False
pygame.quit()
screen.fill(currentColor) # Fill the screen with whatever the stored color is.
pygame.display.update() # Refresh the screen, needed whatever the color is, so don't remove this
现在,当您需要重新着色屏幕时,只需将currentColor更改为您需要的任何颜色,屏幕将自动转换该颜色。 示例:
if foo:
currentColor = (145, 254, 222)
elif bar:
currentColor = (215, 100, 91)
顺便说一句,我认为将颜色存储为元组而不是列表更好
red = (255, 0, 0)
此外,除了循环之外,你不需要pygame.display.update(或翻转)。这个功能只需要获取每个绘制项目的最新形状/值并将其推送到屏幕,因此您只需将它作为循环中的最后一项,因此它会显示所有内容。
答案 2 :(得分:0)
实际上,screen.fill(red)
更改了 Surface 对象screen
中像素的颜色。您需要在更改颜色后更新显示。
但是请注意,您仅应在应用程序循环结束时更新一次显示。每帧显示多次更新会导致闪烁。另请参见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()
说明:
您实际上是在Surface
对象上绘图。如果您在与PyGame显示器关联的 Surface 上绘画,则该信息不会立即显示在显示器中。当使用pygame.display.update()
或pygame.display.flip()
更新显示时,更改将变为可见。
这将更新整个显示的内容。
虽然pygame.display.flip()
将更新整个显示的内容,但是pygame.display.update()
仅允许将屏幕的一部分更新为已更新,而不是整个区域。 pygame.display.update()
是pygame.display.flip()
的优化版本,适用于软件显示,但不适用于硬件加速的显示。