You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Pygame反应测试游戏中Timebar图像无法持续刷新问题排查求助

Fixing Your Timebar Movement Issue in Pygame Reaction Game

Let's break down why your Timebar isn't updating consistently and walk through the fixes:

Key Problems in Your Current Code

  • Inconsistent Screen Clearing & Drawing: You only clear the screen (screen.fill()) inside the event loop, meaning this only happens when an event (like a button press) triggers it. The Timebar is drawn once at the start of the inner loop, but without regular screen clearing, old Timebar instances stick around, and new positions don't render properly when no events occur.
  • Scattered Display Updates: You’re calling pygame.display.update() in multiple random spots (right after drawing Timebar, inside the button press event, etc.). This causes partial screen refreshes and makes rendering inconsistent.
  • UI Tied to Events: All your game UI elements (background, score text) are only drawn inside the event loop. When no events fire, these elements don’t get redrawn, leaving the Timebar to render over stale or missing content.

Step-by-Step Fixes

  1. Centralize Drawing Logic: Move all screen clearing and drawing code outside the event loop, so it runs every frame of the inner game loop—not just when an event happens.
  2. Fix Drawing Order: Always clear the screen first, then draw your background, UI elements, and finally the Timebar (so it sits on top of everything else).
  3. Unify Display Updates: Call pygame.display.update() once at the end of the inner loop to refresh the entire screen consistently.
  4. Switch to Pygame’s Timing: Replace time.time() with pygame.time.get_ticks() for more accurate frame-based timing (this helps with consistent game speed).

Corrected Inner Game Loop Code

# GAME PLAY SECTION --------
score = 0
time_Out = 0
leds.off()
start_Time = pygame.time.get_ticks()  # Use Pygame's tick counter for better precision
time_move = -500
random_num = random.randint(0, 11)
leds.on(random_num)
print(random_num)

# Use milliseconds for finer timing control (30000ms = 30 seconds)
while time_Out < 30000:  
    # 1. Handle events first
    for event in pygame.event.get():
        print("For Event started, Game screen started")
        if event.type == pygame.JOYBUTTONDOWN:
            print("If for event JOYBUTTONDOWN")
            if event.button == random_num:
                B = event.button
                print(B, " button pressed, CORRECT")
                leds.off()
                butt_Sound.play()
                random_num = random.randint(0, 11)
                leds.on(random_num)
                score += 1

    # 2. Clear the screen every frame to remove old content
    screen.fill((255,255,255))
    
    # 3. Draw all game elements in order
    screen.blit(Game_screen[6], (0,0))
    
    # Draw score text
    score_textback = score_fontback.render("00", 3, (199,199,199))
    score_text = score_font.render(str(score), 3, (255,37,24))
    ctr = 1110
    if score >= 10:
        ctr -= 155
    center_pos = (ctr, 580)
    score_rect = score_text.get_rect(center = center_pos)
    screen.blit(score_textback, (645, 390))
    screen.blit(score_text, score_rect)
    
    # Draw the moving Timebar
    screen.blit(Timebar, (time_move,1000))
    time_move += 50  # Update position every frame
    
    # 4. Update timing
    current_Time = pygame.time.get_ticks()
    time_Out = current_Time - start_Time
    
    # 5. Refresh the screen ONCE per frame
    pygame.display.update()
    
    # Lock frame rate to 60 FPS for consistent movement speed
    clock.tick(60)

Quick Additional Tips

  • Moving drawing logic outside the event loop ensures every frame gets a full, fresh render of all elements—including the Timebar.
  • Using pygame.time.get_ticks() gives you millisecond precision, which is far more reliable for game timing than time.time().
  • clock.tick(60) ensures your game runs at a steady 60 FPS, so the Timebar moves at a predictable speed (50 pixels per frame = 3000 pixels per second—adjust this value if you want faster/slower movement).

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

火山引擎 最新活动