2013-11-08 7 views
2

экспериментирует с таймером pygame и ищет способ приостановить таймер и снова запустить таймер с предыдущего времени.Время отслеживания для pygame Python


функции, такие как pygame.time.get_ticks() работы для записи время от начала применения.

Функции, такие как delay или wait Замораживает программу. Я не хочу этого.

Есть ли простой способ отслеживать объект таймера, приостановить его, когда мне нужно, и продолжить его, когда мне нужно?

def timer(self): 
    self.time = (pygame.time.get_ticks()//1000) 
    self.time = self.time - self.pausetime 
    return self.time 

self.pausetime = (pygame.time.get_ticks()//1000) 

выше не будет работать, так как событие, если self.pausetime это другая переменная, определенная в разное время, он все равно будет возвращать количество времени с момента запуска приложения.

Я думаю, мне нужна переменная pause, которую я могу установить на ноль каждый раз, когда я прихожу из паузы.


Любые мысли или простые способы, которые я мог бы пересмотреть?

+0

Вот с помощью get_ticks(), чтобы добавить кулдаун ружей: http://stackoverflow.com/a/18856389/341744 – ninMonkey

+0

Не уверен, что я понимаю. Вы хотите, чтобы таймер возвращался (общее количество времени, прошедшего с момента запуска) минус (сумма времени, потраченного на паузу)? – Cuadue

+0

В идеале, мне бы хотелось, чтобы таймер сохранял количество времени, на которое он отметил. Он был правдоподобным и мог начать снова с предыдущего времени, когда я остановился. Согласно моей реализации выше, как пауза, так и время начнут вычислять все тики с начала метода запуска приложения. – lzc

ответ

1

Что-то вроде этого может работать. Однако не проверял.

class Timer: 
    def __init__(self): 
     self.accumulated_time = 0 
     self.start_time = pygame.time.get_ticks() 
     self.running = True 

    def pause(self): 
     if not self.running: 
      raise Exception('Timer is already paused') 
     self.running = False 
     self.accumulated_time += pygame.time.get_ticks() - self.start_time 

    def resume(self): 
     if self.running: 
      raise Exception('Timer is already running') 
     self.running = True 
     self.start_time = pygame.time.get_ticks() 

    def get(self): 
     if self.running: 
      return (self.accumulated_time + 
        (pygame.time.get_ticks() - self.start_time)) 
     else: 
      return self.accumulated_time 
Смежные вопросы