Как моргнуть строку в Pygame - PullRequest
0 голосов
/ 15 апреля 2020

Я кодирую игру, в которой игрок вводит свое имя, и я хотел бы сделать это на экране.

Вот как я беру имя (name - это строка, которая помещается в глобальную строку). в следующей функции):

while player_name_screen:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    print(name)
                    menu_screen = False
                    player_name_screen = False
                    game_animation = True
                    enemy_animation = True
                    standing = True
                else:
                    name += event.unicode
                    name_text = game_font.render(name, True, (125, 156, 255))
        win.blit(name_text, (500, 500))            
        pygame.display.update()
        clock.tick(fps)

А вот как я хочу прокрутить имя игрока (следующий код в функции, которая вызывается в моем основном l oop):

if game_animation:
        win.blit(name_text, (100, 300))

Но на экране ничего не появляется, и когда я распечатываю это в оболочке, это выглядит примерно так: <Surface(63x50x32 SW)> Как сделать так, чтобы оно правильно мигало на экране? Я уже искал похожие вопросы, но не смог найти ответ на мою проблему. Спасибо за вашу помощь

Редактировать: Вот все, что нужно для этого, чтобы:

name = ""
name_text = game_font.render('', True, (255, 255, 255))

def input_player_name():
    global menu_screen
    global game_animation
    global enemy_animation
    global standing
    global deluxe_or_not
    global name
    global name_text
    #print("Enter player's name")
    player_name_screen = True
    win.blit(playerNameImg, (0, 0))
    while player_name_screen:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    print(name)
                    menu_screen = False
                    player_name_screen = False
                    game_animation = True
                    enemy_animation = True
                    standing = True
                    imperial_march.play()
                    if "deluxe.ver" in name:
                        print("deluxe.ver.exe")
                        deluxe_or_not = 1
                else:
                    name += event.unicode
                    #print(name)
                    name_text = game_font.render(name, True, (125, 156, 255))
        win.blit(name_text, (500, 500))            
        pygame.display.update()
        clock.tick(fps)

def rwg():
    if game_animation:
        win.blit(name_text, (100, 300))
        print(name_text)

run = True
while run:
     for event in pygame.event.get():
          if event.type == pygame.KEYDOWN:
               if event.key == pygame.K_SPACE and menu_screen == True:
                    input_player_name()

     rwg()

1 Ответ

0 голосов
/ 16 апреля 2020

Вы не обновляете экран. Вы обновляете экран только в функции input_player_name, но когда вы получаете имя и перестаете вызываться, обновления для обновления экрана не происходит.

Поэтому добавьте pygame.display.update() в конце l oop

run = True
while run:
     for event in pygame.event.get():
          if event.type == pygame.KEYDOWN:
               if event.key == pygame.K_SPACE and menu_screen == True:
                    input_player_name()

     rwg()
     pygame.display.update()

тогда вы можете избавиться от единицы в input_player_name, так как та, что в l oop происходит очень по кадру, и вы не хотите обновлять экран дважды в кадре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...