2013-09-30 3 views
2

В моей игре в понг, когда кто-то забивает (мяч уходит влево или вправо), положение мяча возвращается в середину экрана, и он ждет одну секунду перед перемещением. В течение одной секунды у меня немного анимации.Остановить время без замораживания программы

Моя проблема в том, что если я приостанавливаю игру в середине анимации, , хотя ни один из объектов не обновляется, и нарисован только текст паузы, время продолжает катиться. , анимация просто останавливается сразу после того, как я приостанавливаю игру. Вот что я имею в виду. Это обновление шар:

def update(self, dt): 
     now = pygame.time.get_ticks()/1000 
     # if time elapsed since the ball got out >= BALL_WAIT_TIME 
     if now - self._spawn_time >= BALL_WAIT_TIME: 
      self.rect = self.calcnewpos(dt) 
      self.handle_collision() 
     # spawn animation 
     else: 
      step = 255/(FPS * BALL_WAIT_TIME) 
      value = int(self._frame * step) 
      rgb = (value, value, value) 
      self._draw_ball(rgb) 
      self._frame += 1 

От http://pygame.org/docs/ref/time.html#pygame.time.get_ticks:

pygame.time.get_ticks()

Возвращает количество millisconds начиная с pygame.init() называется. Перед Pygame инициализируется это всегда будет 0.

Так что даже если ничего не рисуется или обновляться в то время как игра приостановлена, pygame.time.get_ticks() будет возвращать время, прошедшее с pygame.init. Как я могу это решить? Извините, если это немного сложно понять, я отправлю остальную часть кода, если это необходимо.

ответ

2

Ну, похоже, вы просто вычитаете время, когда какое-то событие произошло из текущего времени. Если это ваш метод проверки того, сколько времени прошло со времени события, тогда не будет иметь значения, приостановлена ​​ли игра. Если событие происходит, и вы приостанавливаете игру в течение 10 минут, это всегда будет 10 минут с момента происшествия.

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

Edit: что-то вроде:

class Ball: 
    def spawn(self): 
     self.sinceSpawn = 0 

    def update(self, dt): 
     if not gamePaused: 
      self.sinceSpawn += dt 
     if self.sinceSpawn >= BALL_WAIT_TIME: 
      pass #Do something here 
+0

Это было немного сложнее, но ваш ответ получил меня в правильном пути. Благодарю. – Jovito

Смежные вопросы