1

我试图使用 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)
4

1 回答 1

1

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

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

pygame.event.pump()此外,在显示更新在窗口中可见之前,您必须使用 处理事件。见pygame.event.pump()

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

这一切都意味着您必须调用pygame.display.flip()and pygame.event.pump()before pygame.time.wait()

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)
于 2021-01-02T08:54:22.880 回答