如何在Pygame中同时运行多个while循环
如何在Pygame中同时运行多个while循环
我正在尝试为一个项目编写一个简单的Pygame程序,它只是显示一些表情并用文本转语音的声音进行对话,但是最后有一个必要的while循环来使代码运行,但它会阻塞另一个我需要的while循环来运行程序。我试图添加的while循环使用time.sleep()
,所以如果我尝试将它放到需要不断运行的第一个while循环的相同块中,程序会崩溃。我确定我可能忽视了一些明显的东西,但任何帮助都将不胜感激,谢谢!
以下是代码:
from random import randint from time import sleep import pygame import pygame.freetype import time import random run = True pygame.init() # 表情 face = ['^-^', '^v^', '◠◡◠', "'v'", '⁀◡⁀'] talkingFace = ['^o^', '^▽^', '◠▽◠', "'▽'", '⁀ᗢ⁀'] currentFace = random.choice(face) # 背景 screen = pygame.display.set_mode((800,600)) screen.fill((0,0,0)) # 字体和大小 myFont = pygame.font.Font('unifont.ttf', 100) # 表情渲染 faceDisplay = myFont.render(str(currentFace), 1, (0,255,0)) # 居中并绘制表情 text_rect = faceDisplay.get_rect(center=(800/2, 600/2)) screen.blit(faceDisplay, text_rect) # 防止崩溃 while run: for e in pygame.event.get(): if e.type == pygame.QUIT: run = False pygame.display.flip() # 我试图添加的循环 while run: faceDisplay = myFont.render(str(currentFace), 1, (0,255,0)) screen.blit(faceDisplay, text_rect) time.sleep(randint(5, 10))
如何在Pygame中同时运行多个while循环?
问题的原因是作者想要在Pygame中同时运行多个while循环,但是他使用的方法是错误的。他尝试使用time.sleep、pygame.time.wait或pygame.time.delay来等待或延迟某些操作,但是这些方法会阻塞游戏的响应。
为了解决这个问题,作者应该使用pygame的应用程序循环来处理等待和延迟。可以使用pygame.time.get_ticks()来测量时间,并在特定时间点执行相应的操作。作者给出了一个解决方法的示例代码:
next_render_time = 0 while run: current_time = pygame.time.get_ticks() # [...] if current_time >= next_render_time: currentFace = random.choice(face) faceDisplay = myFont.render(str(currentFace), 1, (0,255,0)) next_render_time = current_time + randint(5, 10) * 1000 screen.fill((0,0,0)) screen.blit(faceDisplay, text_rect) pygame.display.flip()
在这个代码中,作者通过计算下一次渲染的时间点来控制循环。如果当前时间大于等于下一次渲染的时间点,就会随机选择一个新的表情符号并进行渲染。然后更新下一次渲染的时间点。通过这种方式,可以实现在Pygame中同时运行多个while循环。
除了上述解决方法,作者还提到可以使用定时器事件来处理特定时间间隔的操作。但是在作者的情况下,时间间隔是动态变化的,所以使用定时器事件可能不是很合适。
以上就是关于如何在Pygame中同时运行多个while循环的问题的原因和解决方法的内容。