← Все вопросы
Как сделать таймер обратного отсчёта в игре на pygame?
5
Хочу, чтобы у игрока было 30 секунд на уровень, и на экране тикал обратный отсчёт. Как в pygame отслеживать прошедшее время и показывать оставшиеся секунды?
1 ответ
10
✓ Принятый ответ — помог автору
Считать кадры — ненадёжно (зависит от FPS). Используй реальное время через pygame.time.get_ticks() — он возвращает миллисекунды с момента старта.
TIME_LIMIT = 30 # секунд
start_ticks = pygame.time.get_ticks() # запоминаем момент старта
font = pygame.font.SysFont(None, 48)
while running:
# ... события ...
seconds_passed = (pygame.time.get_ticks() - start_ticks) / 1000
left = max(0, int(TIME_LIMIT - seconds_passed))
screen.fill((0, 0, 0))
timer_text = font.render(f"Осталось: {left}", True, (255, 255, 255))
screen.blit(timer_text, (10, 10))
pygame.display.flip()
clock.tick(60)
if left == 0:
print("Время вышло!")
running = False
Идея: запомнил start_ticks в начале, и каждый кадр считаешь, сколько прошло. Делишь на 1000, чтобы получить секунды. get_ticks() идёт по реальным часам, поэтому таймер честный независимо от частоты кадров.
Ваш ответ
Войдите, чтобы ответить на вопрос.