如何解决pygame:创建窗口显示冻结一切
我在那里看到了许多类似的问题,但没有一个解决方案对我有用。这非常简单,所以也许我忽略了一些微不足道的东西。
我的代码(在pygame中创建一个显示窗口):
import pygame
pygame.init()
win = pygame.display.set_mode((500,500))
当我从终端 (python file_name.py) 运行这个文件时,整个屏幕都冻结了,我必须重新启动(关闭我的虚拟机)。但是,如果我直接在终端中用 python 编写这些代码行,则窗口会按原样打开。这有什么关系?
我尝试过的:将最后一行放在while循环中,将其放入主函数中,并使用time.sleep()在程序结束前延迟。
python 3.7.4、pygame 2.0.0、Debian 10.3.0(在 virtualBox 6.1 中运行)
解决方法
您的应用程序运行良好。但是,您还没有实现应用程序循环:
import pygame
pygame.init()
win = pygame.display.set_mode((500,500))
clock = pygame.time.Clock()
run = True
while run:
clock.tick(60)
# handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# update game objects
# [...]
# clear display
win.fill((0,0))
# draw game objects
# [...]
# update display
pygame.display.flip()
pygame.quit()
典型的 PyGame 应用程序循环必须:
- 通过
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过
pygame.display.update()
或pygame.display.flip()
更新显示
repl.it/@Rabbid76/PyGame-MinimalApplicationLoop 另见 Event and application loop
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。