如何在 Pygame 中同时运行多个 While 循环
在 Pygame 应用程序中,避免使用 time.sleep 等阻塞函数至关重要() 执行延迟。相反,依靠应用程序循环和 pygame.time.get_ticks() 等函数来管理与时间相关的任务。
理解挑战
在提供的代码中查询中,多个 while 循环尝试同时运行,但一个循环使用 time.sleep() 会阻止另一个循环执行。
解决方案:使用 Pygame 时间函数
要正确处理时间延迟,请使用 pygame.time.get_ticks() 来获取计时器。根据当前时间计算何时执行特定操作。当当前时间超过计算的时间时,执行该动作。
修改后的代码:
<code class="python">import pygame import random from time import time pygame.init() faces = ['^-^', '^v^', '◡◠◠', "'v'", '⁀◡⁀'] display = pygame.display.set_mode((800, 600)) font = pygame.font.Font('unifont.ttf', 100) surface = font.render(random.choice(faces), 1, (0, 255, 0)) center = surface.get_rect(center=(800/2, 600/2)) next_render_time = time() run = True while run: current_time = time() for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if current_time >= next_render_time: surface = font.render(random.choice(faces), 1, (0, 255, 0)) next_render_time = current_time + random.randint(5, 10) display.fill((0, 0, 0)) display.blit(surface, center) pygame.display.flip()</code>
在此代码中,next_render_time 变量存储的是脸应该更新。当当前时间超过该值时,会随机选择一个新的人脸,进行渲染和显示。这种方法允许多个循环同时运行而不会阻塞。
以上是如何在 Pygame 中避免阻塞并同时运行多个循环?的详细内容。更多信息请关注PHP中文网其他相关文章!