如何创建可视计时器?

How to create a visual timer?

我目前正在努力为我的代码格式化计数计时器。我想要一个以毫秒为单位计数的常规计时器,但是,我无法弄清楚如何在计时器上直观地显示它。目前它只显示毫秒而不是分钟、秒和毫秒,所以一旦计时器达到 100 毫秒,它就会继续以这种方式计数,而不是 1 秒 0 毫秒。我怎样才能让它工作?

import pygame
pygame.init()

screen = pygame.display.set_mode((450, 600))

timer_font = pygame.font.SysFont("Calibri", 38)
timer_sec = 0
timer_text = timer_font.render("00:00:00", True, (255, 255, 255))


timer = pygame.USEREVENT + 0                                      
pygame.time.set_timer(timer, 10)

running = True
while running:
    screen.fill((0, 0, 0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == timer:
            if timer_sec < 600:
                timer_sec += 1
                timer_text = timer_font.render("00:00:%02i" % timer_sec, True, (255, 255, 255))
            else:
                pygame.time.set_timer(timer, 0)

    screen.blit(timer_text, (300, 20))
    pygame.display.update()

不要为此任务使用计时器事件,因为它会导致不准确。使用 pygame.time.get_ticks() 并计算每一帧中的小时、分钟和秒。时间更改时呈现新的时间文本:

import pygame
pygame.init()

screen = pygame.display.set_mode((450, 600))
timer_font = pygame.font.SysFont("Calibri", 38)

start_time = pygame.time.get_ticks()
time_hms = 0, 0, 0
timer_surf = timer_font.render(f'{time_hms[0]:02d}:{time_hms[1]:02d}:{time_hms[2]:02d}', True, (255, 255, 255))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    time_ms = pygame.time.get_ticks() - start_time
    new_hms = (time_ms//(1000*60*60))%24, (time_ms//(1000*60))%60, (time_ms//1000)%60
    if new_hms != time_hms:
        time_hms = new_hms
        timer_surf = timer_font.render(f'{time_hms[0]:02d}:{time_hms[1]:02d}:{time_hms[2]:02d}', True, (255, 255, 255))

    screen.fill(0)
    screen.blit(timer_surf, (300, 20))
    pygame.display.update()

pygame.quit()