首页 > 解决方案 > 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 中运行)

标签: pythonpygamevirtualbox

解决方案


您的应用程序运行良好。但是,您还没有实现应用程序循环:

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, 0))

    # draw game objects
    # [...]

    # update display
    pygame.display.flip()

pygame.quit()

典型的 PyGame 应用程序循环必须:

repl.it/@Rabbid76/PyGame-MinimalApplicationLoop另请参阅事件和应用程序循环


推荐阅读