如何在Pygame中每隔2秒依次显示列表中的随机元素
Pygame 定时切换随机列表项实现方案
核心问题说明
- 直接使用
time.sleep()会阻塞Pygame主循环,导致事件响应、界面刷新功能全部暂停,所以看不到定时切换效果 - 原代码中
random_place仅在初始化时生成一次,运行过程中不会自动更新内容 - 字体初始化放在渲染函数内会重复加载资源,影响运行性能
优化后实现代码
使用Pygame内置的定时器事件实现,不会阻塞主循环运行:
import pygame import pygame.freetype import random # 地点列表 places = ["London", "India", "America", "Australia", "Cambodia", "China", "Dubai", "Egypt", "France", "Germany", "Japan", "Jordan", "Korea", "Myanmar", "Peru", "Russia", "Singapore", "Spain"] # 初始化Pygame基础配置 pygame.init() # 可根据实际需求修改窗口尺寸 screen = pygame.display.set_mode((1280, 720)) # 自定义定时切换地点的事件类型 CHANGE_PLACE_EVENT = pygame.USEREVENT + 1 # 设置每2000毫秒(2秒)触发一次切换事件 pygame.time.set_timer(CHANGE_PLACE_EVENT, 2000) # 全局初始化字体,避免重复加载 game_font = pygame.freetype.SysFont("monospace", 35) # 初始化第一个要显示的随机地点 current_place = random.choice(places) def render_text(content): text_surface, rect = game_font.render(content, (0, 0, 0)) screen.blit(text_surface, (680, 420)) def card(): # 保留你原有card函数的逻辑即可 pass # 主循环 running = True while running: screen.fill((255, 194, 102)) # 事件监听 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 监听定时切换事件,更新当前显示的地点 if event.type == CHANGE_PLACE_EVENT: current_place = random.choice(places) card() render_text(current_place) pygame.display.update() pygame.quit()
扩展说明
如果需要避免短时间内重复显示同一个地点,可以在生成随机项时增加去重判断,比如记录上一次显示的地点,重新生成直到和上一次不同即可。
内容的提问来源于stack exchange,提问作者Shreyas
相关产品推荐
相关产品推荐

