← Все вопросы

Как сделать таймер обратного отсчёта в игре на pygame?

Задан 12 месяцев назад1.3к просмотров1 ответ
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() идёт по реальным часам, поэтому таймер честный независимо от частоты кадров.

Ваш ответ

Войдите, чтобы ответить на вопрос.