@maximsemin23

Как засечь время в python?

В 2д шутере на pygame есть дробовики. У них низкая скорострельность, как сделать так, чтобы выстрел мог быть сделан только через секунду после предыдущего. В общем вопрос такой: как засечь секунду, чтобы во время этой самой секунды не все останавливалось, а другие процессы работали?
  • Вопрос задан
  • 1488 просмотров
Решения вопроса 1
samodum
@samodum
Какой вопрос - такой и ответ
Запоминай время успешного выстрела.
При попытке выстрелить снова бери текущее время и сравнивай со временем прошлого выстрела
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DollaR84
Думаю тут хорошо подойдут методы по работе со временем самого pygame:
pygame.time

Для вашей задачи существуют 2 способа.
Приведу небольшие примеры на срабатывание каждые 5 секунд, чтобы было понятнее как легко масштабировать на любое время.
1 способ. Использовать таймер.
# при выстреле ставим запрет на следующий выстрел
self.timer = 0 # обнуляем начальное значение для отсчета
pygame.time.set_timer(pygame.USEREVENT, 1000) # запускаем таймер (в милисекундах) на срабатывание каждую секунду
затем в обработчике событий:
for event in pygame.event.get():
    if event.type == pygame.USEREVENT:
        self.timer += 1 # считаем количество пройденных секунд
        if self.timer == 5: # если прошло 5 секунд
            pygame.time.set_timer(pygame.USEREVENT, 0) # отключаем таймер
            # даем разрешение на следующий выстрел


2 способ. Использовать тики для отсчета времени.
# при выстреле ставим запрет на следующий выстрел
self.start_ticks = pygame.time.get_ticks() # запоминаем начальное значение тиков в милисекундах
затем в обработчике событий:
for event in pygame.event.get():
    if event.type == ...: # тут какое-то ваше событие на выстрел
        seconds= (pygame.time.get_ticks() - self.start_ticks)/1000 # вычисляем сколько прошло секунд
        if seconds > 5: # проверяем что прошло 5 секунд
            # даем разрешение на следующий выстрел
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы