You can't use while
and sleep
because it blocks main loop.
You have to run it in main loop with if secs != 0
instead of while secs != 0
- mainloop will works as while
, and use time
or pygame.time
inside if
to check if 1 second left (1000ms) and change displayed time.
Something like this
secs = 10
timer = "time left: {}".format(secs)
timer_ao = "time left: {}".format(secs+1)
previouse_time = pygame.time.get_ticks()
while True: # main loop
# ... other elements ...
current_time = pygame.time.get_ticks()
if secs > 0:
if previouse_time - current_time == 1000: # 1000ms = 1s
secs -= 1
timer = "time left: {}".format(secs)
timer_ao = "time left: {}".format(secs+1)
previouse_time = current_time
display_text(timer_ao, white, 20, 20, medText)
display_text(timer, black, 20, 20, medText)
pygame.display.update()
You can also use pygame.time.set_timer to create own event every 1000ms and use it to change displayed text.
SECOND = pygame.USEREVENT
secs = 10
timer = "time left: {}".format(secs)
timer_ao = "time left: {}".format(secs+1)
# start timer
pygame.time.set_timer(SECOND, 1000)
while True: # main loop
for event in pygame.event.get():
if event.type == SECOND:
if secs > 0:
secs -= 1
timer = "time left: {}".format(secs)
timer_ao = "time left: {}".format(secs+1)
previouse_time = current_time
else:
# stop timer
pygame.time.set_timer(SECOND, 0)
display_text(timer_ao, white, 20, 20, medText)
display_text(timer, black, 20, 20, medText)
pygame.display.update()