Pygame, как отобразить текст на прозрачном слое? - PullRequest
2 голосов
/ 14 января 2020

Я пытаюсь отобразить текст на отдельном прозрачном слое после получения бонуса. Экран мигает в течение миллисекунды, и игра продолжается. Где я допустил ошибку?

WIDTH = 500
HEIGHT = 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
surface = pygame.surface.Surface((WIDTH, HEIGHT))

def hit():
    screen.blit(surface, (0, 0))
    bonus = BONUSFONT.render("+3 points!", 1, (0, 0, 0))
    bonus_text = (bonus, (200, 150))
    bonus_end = pygame.time.get_ticks() + 3000
    if bonus_text and pygame.time.get_ticks() < bonus_end:
        surface.blit(*bonus_text)

Я проверил почти все вопросы о поверхностях и слоях, но мне ничего не помогло

1 Ответ

1 голос
/ 14 января 2020

Создайте 2 переменные в глобальном пространстве имен:

bonus_text = None
bonus_end = 0

hit устанавливает bonus_end и вызывается один раз, когда происходит "попадание":

def hit():
    global bonus_end, bonus_text  
    bonus = BONUSFONT.render("+3 points!", 1, (0, 0, 0))
    bonus_text = (bonus, (200, 150))
    bonus_end = pygame.time.get_ticks() + 3000

Создать функция, которая показывает бонус text_

def show_bonus():
    if bonus_text and pygame.time.get_ticks() < bonus_end:
        surface.blit(*bonus_text)

Вызов функции непрерывно в главном приложении l oop:

while True:

    # [...]

    # show bonus text
    show_bonus()

    # update display
    # [...]
...