【发布时间】:2021-03-23 13:48:50
【问题描述】:
我正在尝试为一个项目编写一个简单的 Pygame 程序,该程序仅显示一些面孔并以文本到语音的声音进行对话,但最后有一个 while 循环,这是代码运行所必需的,但会阻塞我需要运行程序的另一个while循环。我尝试添加的 while 循环使用 time.sleep(),因此如果我尝试将它放入与第一个需要不断运行的程序块相同的块中,程序就会崩溃。我确定我可能正在查看一些明显的东西,但任何帮助将不胜感激,谢谢!
代码如下:
from random import randint
from time import sleep
import pygame
import pygame.freetype
import time
import random
run = True
pygame.init()
#faces
face = ['^-^', '^v^', '◠◡◠', "'v'", '⁀◡⁀']
talkingFace = ['^o^', '^▽^', '◠▽◠', "'▽'", '⁀ᗢ⁀']
currentFace = random.choice(face)
#background
screen = pygame.display.set_mode((800,600))
screen.fill((0,0,0))
#font and size
myFont = pygame.font.Font('unifont.ttf', 100)
#face render
faceDisplay = myFont.render(str(currentFace), 1, (0,255,0))
#center and draw face
text_rect = faceDisplay.get_rect(center=(800/2, 600/2))
screen.blit(faceDisplay, text_rect)
#prevent crashes
while run:
for e in pygame.event.get():
if e.type == pygame.QUIT:
run = False
pygame.display.flip()
#loop i'm trying to add
while run:
faceDisplay = myFont.render(str(currentFace), 1, (0,255,0))
screen.blit(faceDisplay, text_rect)
time.sleep(randint(5, 10))
【问题讨论】:
-
您必须将
while循环分离为一个方法,然后在Thread上运行该方法。请参阅此link 了解Thread的工作原理