首页 > 解决方案 > 我不明白 screen.fill() 是如何工作的

问题描述

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

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

标签: pythonpygamepygame-surface

解决方案


您应该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))

您首先绘制矩形,然后用黑色填充整个屏幕,然后在代码调用时在 pc 屏幕上显示最终结果(黑屏)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

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


推荐阅读