如何让PYGAME停止几秒钟?

2022-05-23 00:00:00 python pygame time sleep

问题描述

我知道这是一个简单的问题,我可以只使用time函数或其他什么,但不知何故这对我来说仍然是一个问题。所以我有这个:

    letter = pygame.image.load('w00.png')
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    letter = pygame.image.load('e-2.png')
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    letter = pygame.image.load('l-2.png')
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    letter = pygame.image.load('c-2.png')
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    letter = pygame.image.load('o-2.png')
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    letter = pygame.image.load('m-2.png')
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    letter = pygame.image.load('e-2.png')
    screen.blit(letter, (letter_x, 625))
在每次我blit字母之间(我试图让一个句子一个字母一个字母地自己写),我希望它在继续之前停下来大约0.5秒。问题是,我试过的所有东西都不太管用。

time.sleep()函数、pygame.time.delay()函数和pygame.time.wait()函数都不工作,因为出于某种原因,所有这些函数都在加载之前运行。这些都在一个函数中。(def function():)

我知道这些函数在加载之前运行,因为1.它运行的def function():与之前的和2相同。加载所需的时间正好是我在time.sleep()中花费的时间。

谢谢。

编辑:

我试过了,显然它甚至在运行pygame.time.wait()之前都没有运行该函数。


解决方案

仅当pygame.display.update()pygame.display.flip()时更新显示 叫做。此外,您必须通过pygame.event.pump()处理事件,然后才能在窗口中看到显示的更新。

参见pygame.event.pump()

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

如果要显示文本并延迟游戏,则必须更新显示并处理事件。 请参阅Why doesn't PyGame draw in the window before the delay or sleep?。

无论如何,我建议预先加载图像并循环制作动画:

filenames = ['w00.png', 'e-2.png', 'l-2.png', 'c-2.png', 'o-2.png', 'm-2.png', 'e-2.png']
letters = [pygame.image.load(name) for name in filenames]
for letter in letters:
    pygame.event.pump()
    screen.blit(letter, (letter_x, 625))
    letter_x += 30
    pygame.display.flip()
    pygame.time.delay(500) # 500 milliseconds = 0.5 seconds

相关文章