Приостановка потока времени.

Я делаю игру с Python и Pygame, и я использую time.time для определения времени прохождения пользователями уровней. Однако у меня также есть меню паузы. Как сделать так, чтобы при открытом меню паузы time.time не продолжалось?


person Will6316    schedule 02.06.2017    source источник
comment
Вам не нужно приостанавливать сам time.time, чтобы приостановить внутриигровой таймер.   -  person user2357112 supports Monica    schedule 03.06.2017
comment
Что, если вы зафиксируете текущее время и вычтете его из общего времени, а затем, когда игрок возобновит игру, вы снова запустите таймер на оставшуюся сумму?   -  person ATLUS    schedule 03.06.2017


Ответы (1)


Я думаю, что я бы сделал что-то вроде этого: используйте время, которое clock.tick() возвращает, чтобы увеличить таймер в каждом кадре, если игра не приостановлена, и когда пользователь приостанавливает и возобновляет игру, вызывайте его без аргумента, чтобы отбросить время, прошедшее во время игра была приостановлена.

import sys
import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
font = pg.font.Font(None, 30)
timer = 0
dt = 0
paused = False
running = True

while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False
        elif event.type == pg.KEYDOWN:
            paused = not paused
            # This is needed to discard the time that
            # passed while the game was paused.
            clock.tick()

    if not paused:
        timer += dt  # Add delta time to increase the timer.

        screen.fill((30, 30, 30))
        txt = font.render(str(round(timer, 2)), True, (90, 120, 40))
        screen.blit(txt, (20, 20))

        pg.display.flip()
        dt = clock.tick(30) / 1000  # dt = time in seconds since last tick.

pg.quit()
sys.exit()
person skrx    schedule 04.06.2017