python - pygame:最小化和还原时屏幕擦除-下次更新时变为蓝色
问题描述
我写这篇文章是因为,不知从何而来,我的 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()
解决方案
您可能会收到此错误,因为您没有指定背景颜色,因此,当窗口未更新时,您的操作系统可以使用默认颜色。
虽然我无法在我的计算机(运行 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()
我希望这个答案对你有所帮助!请让我知道此解决方案是否适合您,如果您有任何其他问题,请随时在下面发表评论!
推荐阅读
- .net - AWS QLDBSessionClient sendCommand 失败
- reactjs - 管理全局变量 react redux 的状态
- java - 显示数据库 MySQL 中保存的消息
- tensorflow - TF2.0创建单个pb文件没有额外的文件夹或文件?
- angular - 从浏览器重新加载页面时的角度异步请求
- javascript - javascipt函数和var编译时的区别
- linux-kernel - FDT(扁平设备树):属性名称(字符串):逗号终止的字符串而不是 NUL 字符
- python-3.x - POP3 缓冲区以一种奇怪的方式被翻译。角色在不应该的时候是坏的
- audio - 为什么啁啾频率的微小变化会导致快速傅里叶变换输出发生重大变化?
- java - Spark 调试日志未显示在纱线资源管理器中