如何创建可视计时器?
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()
我目前正在努力为我的代码格式化计数计时器。我想要一个以毫秒为单位计数的常规计时器,但是,我无法弄清楚如何在计时器上直观地显示它。目前它只显示毫秒而不是分钟、秒和毫秒,所以一旦计时器达到 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()