You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame中timer不显示文本,3秒倒计时仅等待后直接进入游戏如何修复

问题核心原因

  • 进入倒计时循环时start变量初始为False,你写的if start:判断直接跳过了文本渲染逻辑,自然不会显示任何倒计时文本
  • time.sleep(1)会完全阻塞pygame主线程,即使渲染了文本也会因为线程阻塞无法正常刷新到窗口
  • 没有在绘制倒计时前清空窗口背景,之前的界面元素会直接覆盖住倒计时文本
  • 你把倒计时循环写在了鼠标点击事件的判断分支内,会阻塞整个pygame的事件队列处理,大概率会触发窗口假死

修复后的代码示例

def main_menu():
    start = False
    start_in = 3
    clock = py.time.Clock()
    # 可根据需求调整字体大小、样式
    start_font = py.font.SysFont(None, 100)
    running = True
    
    while running:
        # 每次渲染前先清空窗口背景,可替换为你自己的背景色
        WIN.fill((0, 0, 0))
        for event in py.event.get():
            if event.type == py.QUIT:
                running = False
                py.quit()
                exit()
            if event.type == py.MOUSEBUTTONDOWN and not start:
                start = True
                # 记录倒计时开始的时间戳,不用sleep阻塞线程
                count_down_start = py.time.get_ticks()
        
        if start and start_in > 0:
            # 计算已经过去的秒数
            elapsed = (py.time.get_ticks() - count_down_start) // 1000
            if elapsed >= 1:
                start_in -= 1
                count_down_start = py.time.get_ticks()
            # 渲染并绘制倒计时文本
            start_label = start_font.render(str(start_in), True, (255,255,255))
            WIN.blit(start_label, (WIDTH/2 - start_label.get_width()/2, HEIGHT/2))
        
        # 倒计时结束进入主游戏
        if start_in == 0:
            main()
        
        py.display.update()
        # 控制窗口帧率为60
        clock.tick(60)

关键修改说明

  • 去掉了阻塞线程的time.sleep(1),改用pygame内置的时间函数py.time.get_ticks()计算时间差实现倒计时,不会阻塞界面刷新
  • 移除了错误的if start:渲染判断,只要处于倒计时阶段就会正常渲染文本
  • 每次循环先清空窗口背景,避免旧内容覆盖倒计时
  • 把倒计时逻辑放到主事件循环内,不会阻塞事件处理,窗口不会出现假死问题

内容的提问来源于stack exchange,提问作者Dependra Khatri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:36:03