Как можно сделать таймер?

Я пишу игру, что-то похожее на "Cookie" и мне нужно, чтобы через каждую секунду прибавлялось определенное число, как можно сделать такой таймер? Подскажите пожалуйста
  • Вопрос задан
  • 2431 просмотр
Пригласить эксперта
Ответы на вопрос 2
Kademn
@Kademn
Злой
import time


class Stopwatch:
    """ Counts passed seconds """
    def __init__(self):
        self.init_time = time.time()
        self.seconds = 0
        self.last_check = self.init_time

    def checkseconds(self):
        now = time.time()
        count = int(now - self.last_check)
        mod = now - self.last_check - count
        self.seconds += count
        self.last_check = now - mod


Остается периодически дёргать checkseconds созданного экземпляра. Если дёргать с периодичностью меньшей секунды, то значение пройденных секунд будет обновляться ежесекундно.
Работу кода не проверял, но вроде нигде не ошибся. Попробуйте.

Тоже самое, с помощью генераторов:
import time

def stopwatch():
    """ Coroutine that returns number of seconds
        passed after initialization
    """
    # Initialization
    init_time = time.time()
    seconds = 0
    last_check = init_time
    
    # Main loop
    while True:
        now = yield seconds
        count = int(now - last_check)
        mod = now - last_check - count
        seconds += count
        last_check = now - mod


Теперь создаем генератор и, также почаще, посылаем ему настоящее время:
# Создаем сопрограмму
my_watcher = stopwatch()

# Не забываем про инициализацию (первый yield)
my_watcher.send(None)

# Остальные send будут возвращать количество пройденных
# после инициализации секунд
passed_seconds = my_watcher.send(time.time())
<...>
passed_seconds = my_watcher.send(time.time())
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вот так можно на твистед www.saltycrane.com/blog/2008/10/running-functions-...
Ну и в официальной документации twistedmatrix.com/documents/13.2.0/core/howto/time.html
На твистед и всю игру можно забацать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы