我之所以这样写,是因为我的pygame程序开始无处不在。我对pygame并不陌生,我会说我比大多数人都了解。我已经使用了很多年了,这个错误或其他错误使我感到困惑。
问题:按下最小化按钮后,屏幕(即pygame.display对象)完全变为空白(灰色)。在调用更新之前,它不会显示任何内容,并且在调用该更新时,它将很好地重画以前的所有内容,但是它将在所有内容上绘制一个透明的蓝色矩形。
启动时我的屏幕如下所示:
最小化和还原后,看起来像这样:
调用下一个更新后,我得到了:
这是什么使它成为真正的骗子。我认为无论如何都应该进行更新,因此在重新安装python(3.5的3.7版本)和pygame(1.9.2的更少版本)之前,我擦除了硬盘,重新安装了整个操作系统。因此,该系统是开箱即用的。
我已经使用pygame多年了。我知道我可以对此进行编码(可能是通过在最小化之前绘制所有内容来进行编码),但是这将增加我所不愿意提供的复杂性和开销,因为显然发生了一些破事。>
import pygame, sys
pygame.init()
Screen = pygame.display.set_mode( ( 1200, 700 ), pygame.RESIZABLE, 32 )
pygame.draw.circle( Screen, ( 200, 200, 200 ), ( 600, 350 ), 300, 0 )
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: pygame.quit()
pygame.display.update()
答案 0 :(得分:0)
您可能会遇到此错误,因为您没有指定背景色,因此,当窗口未更新时,您的操作系统可以使用默认颜色。
虽然我无法在运行Windows 7的计算机上重现该问题,但是我相信只需调用screen.fill()
并进行少量代码移动就可以解决问题。
我删除了传递给pygame.display.set_mode()
的多余参数,因为它们对我来说似乎不必要。
我将对pygame.draw.circle()
的调用移到了while
循环中,以便每帧绘制一个圆圈。我删除了第一行pygame.display.update()
,因为在完成所有绘制之后,该行通常应位于while
循环的末尾。
我不确定您发布的代码是否正确缩进了第二个pygame.display.update()
,但此行不应在for
循环内运行,而应在每个代码的末尾运行while
循环的迭代。因此,我将其移回了一个缩进级别。
最后,我添加了行screen.fill((0, 0, 0))
,该行用黑色填充了屏幕。该行必须在将内容绘制到屏幕的任何代码行之前出现,因为那样我们将看不到刚刚绘制的内容。
该行应该停止Mac默认使用的蓝色背景。
这是固定代码:
import pygame, sys
pygame.init()
screen = pygame.display.set_mode((1200, 700))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
screen.fill((0, 0, 0))
pygame.draw.circle( screen, ( 200, 200, 200 ), ( 600, 350 ), 300, 0 )
pygame.display.update()
希望这个答案对您有所帮助!请让我知道该解决方案是否适合您,如果您还有其他疑问,请随时在下面发表评论!