如何在 Pygame 中一次运行多个 while 循环
- 2025-01-03 08:41:00
- admin 原创
- 28
问题描述:
我正在尝试为一个项目开发一个简单的 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))
解决方案 1:
不,不是这样的。您有一个应用程序循环,因此请使用它。time.sleep
或pygame.time.wait()
不是pygame.time.delay
在典型应用程序中等待或延迟某事的方式。等待时游戏不会响应。用于pygame.time.get_ticks()
测量时间。
在 pygame 中,可以通过调用来获取系统时间,该方法返回自调用pygame.time.get_ticks()
以来的毫秒数。请参阅模块。pygame.init()
`pygame.time`
计算需要改变文本的时间点。在当前时间大于计算的时间点后,获取一个新的随机文本并渲染文本Surface 。计算一个大于当前时间的新的随机时间点:
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()
时间乘以 1000(randint(5, 10) * 1000
),因为 的时间单位pygame.time.get_ticks()
是毫秒。
实际上,您也可以使用计时器事件。请参阅如何使用 PyGame 计时器事件?。
但是,就您而言,时间间隔不是恒定的。在动态变化的间隔上使用计时器事件有点奇怪。我更愿意对需要以恒定间隔执行的操作使用计时器事件。但这只是我的观点。
完整示例:
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))
#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))
next_render_time = 0
#prevent crashes
while run:
current_time = pygame.time.get_ticks()
for e in pygame.event.get():
if e.type == pygame.QUIT:
run = False
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()
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD