我不明白screen.fill()的工作原理

时间:2019-09-06 20:18:15

标签: python pygame pygame-surface

屏幕填充应该会更改背景颜色。但是,如果我在屏幕填充之前绘制了任何东西,它不会显示,但是如果我在它之后绘制了一些东西,则它在更新的背景色下可以正常工作。 我正在谈论的2个代码: 在循环中(i在循环之前初始化为0):

pygame.draw.rect(screen, (255-i, i, 0),`pygame.Rect(30,30,60,60)`
i=(i+1)%255
screen.fill((0, 0, 0))

此代码显示黑屏

screen.fill((0,0,0))
pygame.draw.rect(screen, (255-i, i, 0), `pygame.Rect(30,30,60,60)`
i=(i+1)%255

这很好。为什么会这样呢?

1 个答案:

答案 0 :(得分:3)

您应该在代码中的某个位置进行pygame.display.update()调用,理想情况下,它应该是主循环的最后一行。可能在其他地方,但是应该在您的摘录之后。这实际上是在您的PC屏幕上绘制的命令。

类似于pygame.draw模块或pygame.fill的功能在内部表面(存储在您的PC内存中的对象)上绘制。您可以想象他们只是编辑一个2D数组,其中该数组的每个元素都是一个3或4个长元组,用于存储像素的RGB或RGBA颜色。
在您致电pygame.display.update()之前,屏幕上实际上没有显示任何内容。基本上pygame.display.update()会读取2D数组,并在调用pygame.display.update()时将屏幕上的像素相应地更改为2em数组中 的值。

这意味着在以下代码段中:

pygame.draw.rect(screen, (255-i, i, 0),`pygame.Rect(30,30,60,60)`
i=(i+1)%255
screen.fill((0, 0, 0))

首先绘制矩形,然后用黑色填充整个屏幕,然后在代码调用pygame.display.update()时在pc屏幕上显示最终结果(黑色屏幕)。没有机会看到矩形。

相反

screen.fill((0,0,0))
pygame.draw.rect(screen, (255-i, i, 0), `pygame.Rect(30,30,60,60)`
i=(i+1)%255

在这里,您首先用黑色填充屏幕,然后绘制矩形,然后显示最终结果,即黑色背景和彩色矩形。