首页 > 解决方案 > 我该怎么做才能让我的 PyGame 窗口响应?

问题描述

我试图在每次运行代码时打开一个窗口,但每次运行代码时,它都会显示窗口无响应。

我的代码如下:

import os
import time
import sys
pygame.font.init()

WIDTH, HEIGHT = 500, 400
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("EscapeGame")

BG = pygame.transform.scale(pygame.image.load(os.path.join("GameMap1.png")), (WIDTH, HEIGHT))


def main():
    fps = 60

    clock = pygame.time.Clock()

    def redraw_window():
        WIN.blit(BG, (0,0))
        pygame.display.update()

        while True:
            clock.tick(fps)
            redraw_window()
                    
            for event in pygame.event.get():
                if event.type == sys.exit:
                    sys.exit()
input()
main()

我已经用 event.get 和 event.pump 尝试了一些东西,我可能遗漏了一些非常基本的东西。有人能告诉我我还能尝试什么吗?

另外,我是 pygame 的新手,所以如果有人发现另一个错误,请告诉我。我将不胜感激。

标签: python-3.xpygame

解决方案


窗口没有响应,因为您没有通过调用来处理事件pygame.event.get()

虽然pygame.event.get()在您的代码中,但它从未执行过,因为

a)它在一个你从不调用的函数中
b)你的代码块在input()调用

您的代码应如下所示:

import os

pygame.init()

WIDTH, HEIGHT = 500, 400

def main():
    WIN = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption("EscapeGame")

    BG = pygame.transform.scale(pygame.image.load(os.path.join("GameMap1.png")).convert_alpha(), (WIDTH, HEIGHT))
    fps = 60
    clock = pygame.time.Clock()

    while True:
        clock.tick(fps)
                
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                    return
        
        WIN.blit(BG, (0,0))
        pygame.display.flip()

main()

推荐阅读