Как установить таймер для определенного элемента c в Pygame - PullRequest
0 голосов
/ 23 февраля 2020

Я очень неопытен в Pygame & python .. Я готовил учебник для YouTube по созданию игровой платформы с Pygame. Все работает так, как задумано, за исключением одной вещи.

Я хочу временно увеличить высоту прыжков своих персонажей, но я просто не заставляю ее работать так, как я хочу. Я могу увеличить высоту прыжка, но, к сожалению, не только временно, но и до конца этого забега. Как я уже сказал, я очень неопытный, и я был бы рад, если бы кто-нибудь мог сказать мне, как решить мою проблему

Верхняя часть (boost & mega_boost) работает так же, как и планировалось. Всякий раз, когда персонаж игрока поражает их, персонаж запускается вверх на несколько секунд. Но «super_jump» не должен запускать персонажа в воздухе, он должен только увеличивать высоту прыжка, например, нормальная высота прыжка равна «20», и я хочу, чтобы она была увеличена до «40» в течение 5 секунд.

Мне сказали, что мой диспетчер времени находится внутри функции включения питания, и я должен поместить его в другое место, но я не знаю, где его поставить. Буду очень признателен, если кто-нибудь сможет мне помочь. Вот часть Кодекса:

if pow.type == "super_jump":
                self.player.mega_jump_status = 1
                now = pg.time.get_ticks()
                if now - self.player.last_update > 5000:
                    self.player.mega_jump_status = 0

1 Ответ

0 голосов
/ 24 февраля 2020

Такие вещи обычно делятся на две фазы. Первое, когда включение включено. Модель предназначена для включения питания на некоторое время, оно выглядит как 5000 мс из вашего кода вопроса.

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

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

TIME_MEGA_JUMP = 5000  # milliseconds of power-up

Когда игрок нажимает на элемент питания, просто запишите время. Примечание: self.player.mega_jump_time должно быть инициализировано в 0 в вашем классе игрока, иначе тест прыжка вызовет ошибку, потому что переменная еще не существует.

if ( <power-up test condition> ):
    player.mega_jump_time = pygame.time.get_ticks()

Затем, когда игрок прыгает , проверьте время, чтобы убедиться, что включение все еще действует:

...
elif ( event.type == pygame.KEYUP ):
    time_now = pygame.time.get_ticks()
    ...       
    elif ( keys[pygame.K_SPACE] ):            # Jump
        # Is the player still mega_jumping
        if ( player.mega_jump_time + TIME_MEGA_JUMP > time_now ):
            # TODO: code Me-me-mega-jump
            pass
        else:
            # TODO: code for normal jump
           pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...