Pygame, 屏幕只在退出时更新 pygame window?

Pygame, screen only updates when exiting pygame window?

我是 pygame 的新手,我需要一些帮助,因为我的代码无法正常工作。

好的,问题来了:我希望屏幕在我 运行 时变白,但它仍然是黑色的,但是当我按下退出键时,它会变白大约一秒钟然后关闭。

当我放一张图片(比如 player.png)时它会出现大约一秒钟然后退出。我不知道我做错了什么,

请帮助修复代码并解释为什么会这样?

代码如下:

import pygame

pygame.init()

screen = pygame.display.set_mode((640,480))
image = pygame.image.load('player.png')
gameExit = False
gameLoop = True

pygame.display.update()
white = (255,255,255)

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        gameExit = True

    for event in pygame.event.get():
        screen.fill(white)







pygame.display.update()




pygame.quit()
quit()

PS。我没有收到任何错误

Python 对缩进敏感。在您的代码中,仅在主循环结束后才调用 pygame.display.update()

此外,如果两个 for 循环之间的事件队列中有一个事件,您只需将背景涂成白色,然后为队列中的每个事件填充背景。

请注意,这也可能导致您的 QUIT 事件在第二个循环中 "swallowed"。


所以这个

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        gameExit = True

    for event in pygame.event.get():
        screen.fill(white)

pygame.display.update()

应该是

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True

    screen.fill(white)

    pygame.display.update()

好的,所以我同意 Sloth 的观点,但与其在最后进行所有的屏幕更新、填充和 blitting,这会降低脚本的可读性,你应该像一个 animate 函数那样 运行s 每次都在 while 循环的末尾,并将 blitting 和屏幕更新内容放入该函数中。抱歉 运行-on 句子。

哦,你不需要 GameLoop 变量。