pygame:最小化时屏幕擦拭并还原-下次更新时变为蓝色

时间:2018-08-14 00:14:27

标签: python pygame screen display

我之所以这样写,是因为我的pygame程序开始无处不在。我对pygame并不陌生,我会说我比大多数人都了解。我已经使用了很多年了,这个错误或其他错误使我感到困惑。

问题:按下最小化按钮后,屏幕(即pygame.display对象)完全变为空白(灰色)。在调用更新之前,它不会显示任何内容,并且在调用该更新时,它将很好地重画以前的所有内容,但是它将在所有内容上绘制一个透明的蓝色矩形。

启动时我的屏幕如下所示:

My screen looks like this upon boot up

最小化和还原后,看起来像这样:

After minimizing and restoring, it looks like this

调用下一个更新后,我得到了:

After the next update is called, I get this

这是什么使它成为真正的骗子。我认为无论如何都应该进行更新,因此在重新安装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()

1 个答案:

答案 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()

希望这个答案对您有所帮助!请让我知道该解决方案是否适合您,如果您还有其他疑问,请随时在下面发表评论!