如何在Pygame中同时运行多个while循环

10 浏览
0 Comments

如何在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))

0
0 Comments

如何在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循环的问题的原因和解决方法的内容。

0