Python Pygame文本Blit和time.sleep不工作

Python Pygame文本Blit和time.sleep不工作,python,pygame,Python,Pygame,我在pygame屏幕上快速显示文本时遇到了困难。现在在退出之前,我只想让一条消息显示2秒钟,然后让游戏退出。为此,我使用time.sleep(2)。然而,我相信大多数其他人不会因为我在Stackoverflow上查到的问题而产生这个问题,文本直到窗口关闭前的最后一刻才显示出来。相反,按下关闭按钮后,屏幕保持白色。我的代码如下。请注意,这不是的副本 您可以尝试将time.sleep(2)替换为 for i in range(0, 200, 1): time.sleep(0.01) 如果您

我在
pygame
屏幕上快速显示文本时遇到了困难。现在在退出之前,我只想让一条消息显示2秒钟,然后让游戏退出。为此,我使用
time.sleep(2)
。然而,我相信大多数其他人不会因为我在Stackoverflow上查到的问题而产生这个问题,文本直到窗口关闭前的最后一刻才显示出来。相反,按下关闭按钮后,屏幕保持白色。我的代码如下。请注意,这不是的副本


您可以尝试将
time.sleep(2)
替换为

for i in range(0, 200, 1):
    time.sleep(0.01)
如果您希望能够使用CTRL-C停止程序,这在长时间睡眠的其他情况下非常有用。使用函数也可能更方便:

def MySleep(duration, resolution=10):
    """Sleep, without freezing the program. All values in ms"""
    for i in range(0, int(duration), int(resolution)):
        time.sleep(resolution / 1000)

最后,我使用了前面提到的
pygame.time.set\u timer
workaround@codeprager

这对我来说很有效-将时间.睡眠(2)替换为:

pygame.time.set_timer(pygame.USEREVENT, 2000)

should_quit = False

while not should_quit:
    for event in pygame.event.get():
        if event.type == pygame.USEREVENT:
            should_quit = True

事实上,我也遇到了同样的问题,我发现如果我在pygame.quit()之后直接移动time.sleep(2),它就会按预期工作。我是pygame新手,不知道为什么会这样

screen_text = font.render('Test', True, red)
gameDisplay.blit(screen_text, (0, 0))
pygame.display.update()

pygame.quit()
time.sleep(2)

由于某些原因,stdlib time.sleep()在pygame中不起作用。 然而,pygame确实有自己的时间函数。 这是我写的一个字符一个字符地打印消息的代码

message = ""
font = pygame.font.Font("freesansbold.ttf", 32)
message_text_x = 0
message_text_y = 550
message_text_speed = 35
inF = open("chapter_1.txt")
lines = inF.readlines()

def write_message(char, x, y):
    # first render the value as text so it can be drawn on the screen using screen.blit
    message_text = font.render(char, True, (0, 0, 0))
    screen.blit(message_text, (x, y))

running = True
while running:
    for line in lines:
        for char in line:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        running = False
                    if event.key == pygame.K_SPACE:
                        message_text_speed = 10

            message += char
            write_message(message, message_text_x, message_text_y)
            pygame.event.pump()
            pygame.time.delay(message_text_speed)
            pygame.display.update()
            clock.tick(60)

当点击空格键时,文本的速度会变快

它在没有时间的情况下工作吗。睡眠?@whackamadoodle3000它只是立即退出,所以我不确定时间是否是问题所在。睡眠似乎是在时间之后调用
更新()
。睡眠暗示着某种奇怪的异步。。。相当困惑。这实际上似乎是一个相当棘手的问题!有趣的是,您的代码在Windows 10和python 2/3中的我的计算机上“工作”。但是,
time.sleep(n)
不是最优的,因为pygame窗口将冻结,因为调用
sleep
函数时python程序基本上是“冻结”的。通过使用
pygame.time.set_timer()
在x毫秒后触发自定义pygame
userevent
x毫秒来解决此问题也无法正常工作,因为在拖动应用程序窗口时,所有pygame事件都会冻结!
message = ""
font = pygame.font.Font("freesansbold.ttf", 32)
message_text_x = 0
message_text_y = 550
message_text_speed = 35
inF = open("chapter_1.txt")
lines = inF.readlines()

def write_message(char, x, y):
    # first render the value as text so it can be drawn on the screen using screen.blit
    message_text = font.render(char, True, (0, 0, 0))
    screen.blit(message_text, (x, y))

running = True
while running:
    for line in lines:
        for char in line:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        running = False
                    if event.key == pygame.K_SPACE:
                        message_text_speed = 10

            message += char
            write_message(message, message_text_x, message_text_y)
            pygame.event.pump()
            pygame.time.delay(message_text_speed)
            pygame.display.update()
            clock.tick(60)