如何重置pygame.time.Clock()?数独游戏重启时重置时钟
解决Pygame数独时钟重置问题
你的问题出在**pygame.time.get_ticks()**的特性上:它返回的是从Pygame初始化到当前的总毫秒数,是全局累计的,没法通过简单赋值重置。要实现游戏重启时时钟归零,你需要自己维护游戏的起始基准时间,而不是直接用全局的ticks。
具体解决步骤:
- 新增变量记录游戏开始的基准时间,比如
start_ticks,在游戏启动和重启时初始化它 - 计算游戏运行时间时,用当前全局ticks减去基准时间,得到本次游戏的计时
- 在重启按钮的触发逻辑里,重新设置
start_ticks为当前的pygame.time.get_ticks()
修改后的代码示例:
import pygame pygame.init() # 初始化相关变量 clock = pygame.time.Clock() font = pygame.freetype.SysFont(None, 34) font.origin = True game_over = False start_ticks = pygame.time.get_ticks() # 初始基准时间 while True: # 处理事件(补充你的重启按钮逻辑) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 重启按钮点击检测(替换成你实际的按钮区域判断) if event.type == pygame.MOUSEBUTTONDOWN: if 100 <= event.pos[0] <= 200 and 100 <= event.pos[1] <= 150: game_over = False start_ticks = pygame.time.get_ticks() # 重置基准时间 if not game_over: screen.fill(pygame.Color(button_words_color), (0, 0, screen_dimension, 50)) # 计算本次游戏的运行时长 elapsed_ticks = pygame.time.get_ticks() - start_ticks millis = elapsed_ticks % 1000 seconds = int(elapsed_ticks / 1000 % 60) minutes = int(elapsed_ticks / 60000 % 24) # 格式化毫秒为三位数字,显示更规范 out = '{minutes:02d}:{seconds:02d}:{millis:03d}'.format(minutes=minutes, millis=millis, seconds=seconds) font.render_to(screen, (5, 35), out, pygame.Color(button_color)) pygame.display.flip() clock.tick(60)
关键说明:
start_ticks每次游戏启动或重启时都会被重置为当前全局ticks,确保计时从0开始- 格式化字符串时给
millis加上:03d,避免出现单/两位数字的毫秒显示 - 记得把示例中的重启按钮点击判断替换成你实际的按钮区域检测逻辑
内容的提问来源于stack exchange,提问作者WilsonGoins
相关产品推荐
相关产品推荐

