python - 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()
最好有一个功能,但任何解决方案都可以。
解决方案
你不能。您必须在每一帧中重新绘制整个场景。
为形状创建类。例如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()
推荐阅读
- javascript - 如何在 TypeScript 中合并两个具有共享 ID 的对象数组?
- three.js - React-Three-Fiber 动画在滚动时重置
- excel - 如何将公式应用于每一行的整个工作表
- python - 使用 while 循环的装饰器
- android - Xamarin/Android - 无法获取提供程序 com.google.firebase.provider.FirebaseInitProvider
- php - 从 Axios Post 请求正文获取 Laravel 的参数
- sql - VBA 动态表 (ListObject)
- reactjs - React-Table:仅选择单行,禁用多行选择
- arrays - 检查数组是否有值
- ruby-on-rails - 在 rails Dropbox 中显示标签