Pygame没有暂停更新屏幕[重复]

Posted

技术标签:

【中文标题】Pygame没有暂停更新屏幕[重复]【英文标题】:Pygame not updating screen with pause [duplicate] 【发布时间】:2020-08-24 07:24:59 【问题描述】:

我试图使用 pygame 创建一个单击运行时的脚本。该窗口将屏幕颜色更改为蓝色、灰色、红色,它们之间有一秒的延迟,然后退出该循环,然后按照print("cycle done") 代码的正常运行游戏。不幸的是,窗口打开,挂起大约 3 秒钟,然后显示红色屏幕,而不是通过每种颜色。

import pygame as pg

running = True
calibration = False
pg.init()
screen = pg.display.set_mode((600, 400))
screen_rect = screen.get_rect()
clock = pg.time.Clock()
timer = 0

white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False

    if not calibration:
        pg.time.wait(1000)
        screen.fill(blue)
        pg.display.flip()

        pg.time.wait(1000)
        screen.fill(green)
        pg.display.flip()

        pg.time.wait(1000)
        screen.fill(red)
        pg.display.flip()

        calibration = True
        print(calibration)

    print("cycle done")
    clock.tick(60)

【问题讨论】:

嗯,在我的机器上运行良好。预期输出为蓝色 1 秒,绿色 1 秒,然后保持红色? 是的,这正是我想要发生的事情,我使用的是 Mac,我可以知道你正在运行它吗? 我在 Windows 10 上运行它并使用 pygame 1.9.6 我使用相同版本的 pygame。那么知道是什么导致了这个问题吗? 这样的东西可能会起作用:[...] if not calibration: pg.time.wait(1000) screen.fill(blue) pg.display.flip() pg.event.pump() pg.time.wait(1000) screen.fill(green) pg.event.pump()@98 987654333@pg.display.flip()pg.event.pump()calibration = Trueprint(calibration) 【参考方案1】:

如果您只是等待一段时间,您可以使用pygame.time.waitpygame.time.delay。但是,如果要显示一条消息然后等待一段时间,则需要事先更新显示。仅当 pygame.display.update()pygame.display.flip() 时才更新显示 叫做。见pygame.display.flip()

这将更新整个显示的内容。

您还必须使用pygame.event.pump() 处理事件,然后才能在窗口中看到显示的更新。见pygame.event.pump()

对于游戏的每一帧,您都需要对事件队列进行某种调用。这可确保您的程序可以在内部与操作系统的其余部分进行交互。

这一切都意味着你必须在pygame.time.wait()之前调用pygame.display.flip()pygame.event.pump()

while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False

    if not calibration:
        
        pygame.event.pump()
        pg.time.wait(1000)
        
        screen.fill(blue)

        pg.display.flip()
        pygame.event.pump()
        pg.time.wait(1000)

        screen.fill(green)
        
        pg.display.flip()
        pygame.event.pump()
        pg.time.wait(1000)

        screen.fill(red)
        
        pg.display.flip()
        pygame.event.pump()
        pg.time.wait(1000)

        calibration = True
        print(calibration)

    print("cycle done")
    clock.tick(60)

【讨论】:

以上是关于Pygame没有暂停更新屏幕[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试使用pygame并需要和界面[重复]

导入pygame没有名为'pygame'的模块[重复]

Pygame - 移动矩形中的中心文本[重复]

pygame / python中的文本输入框[重复]

如何创建一个空字符串并更新它[重复]

python-pygame实现飞机大战-5-屏幕渲染绘制分数生命数超级炸弹数以及暂停功能