我不明白 screen.fill() 是如何工作的

I do not understand how screen.fill() works

屏幕填充应该改变背景颜色。但是如果我在屏幕填充之前绘制任何东西,它不会显示,但如果我在它之后绘制一些东西,那么它可以在更新的背景颜色下正常工作。 我正在谈论的 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

这工作正常。为什么会这样?

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

类似于 pygame.draw 模块或 pygame.fill 的功能在内部表面上绘制(存储在电脑内存中的对象)。你可以想象他们只是编辑一个二维数组,这个数组的每个元素都是一个 3 或 4 长的元组,存储像素的 RGB 或 RGBA 颜色。
在您调用 pygame.display.update() 之前,屏幕上实际上没有显示任何内容。基本上 pygame.display.update() 读取二维数组并根据二维数组中的值更改屏幕像素 在调用 pygame.display.update()

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

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()。没有机会看到矩形。

相反

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

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