Как отложить функцию, не останавливая и не останавливая всю прогу? - PullRequest
0 голосов
/ 20 января 2019

Как сказано в заголовке, я работаю над проектом Pygame, и я хочу сделать задержку, но все предлагаемые функции - pygame.time.delay() или pygame.time.wait() и sleep(), и все эти 3 блокируют всю программу при вызове.

Чтобы быть более ясным, я хочу, чтобы персонаж получал урон каждую секунду, стоя на лаве, при этом имея право убегать от нее. Но когда функция отключается, программа блокируется, и я ничего не могу сделать до его смерти.

def delay(y):
    starttime = time.time()
    while True:
        time.sleep (y - ((time.time() - starttime) % y))

def hurt(x):
    global Life
    pygame.mixer.Sound.play (Aie)
    Life -= x

if tilemap[PlayerPos[1]][PlayerPos[0]] == 4 and Life != 0:
    while tilemap[PlayerPos[1]][PlayerPos[0]] == 4 and Life != 0:
        delay(1)
        hurt(1)
        death()

(4 означает LAVA)

1 Ответ

0 голосов
/ 20 января 2019

Вы можете поместить условие, включающее текущее время, вместо использования задержки, например,

if time.time()%1==0 and tilemap[PlayerPos[1]][PlayerPos[0]] == 4 and Life != 0:
        while tilemap[PlayerPos[1]][PlayerPos[0]] == 4 and Life != 0:
            hurt(1)
            death()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...