Как сделать так, чтобы содержимое строки отображалось на экране при вводе с клавиатуры? - PullRequest
1 голос
/ 28 февраля 2020

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

def input_player_name():
    player_name_screen = True
    name = ""
    win.blit(player_name_bg, (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)
                    player_name_screen = False
                else:
                    name += event.unicode                 
        pygame.display.update()
        clock.tick(fps)

Если я напишу print(name) сразу после name+=event.unicode, каждая набранная вещь появится в консоли. Должен ли я использовать что-то вроде этого

textsurface = game_font.render(str(name), False, (255, 255, 255))
    win.blit(textsurface, (0, 0))

и заставлять его обновляться каждый раз, когда что-то новое входит в name? Спасибо за вашу помощь

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете использовать pygame.font или pygame.freetype. Далее я использую pygame.font.
. Что вам нужно сделать, это сгенерировать объект font и отобразить текст в pygame.Surface (name_surf). Эта поверхность должна быть blit к окну непрерывно в l oop. Когда имя меняется, поверхность должна быть воссоздана:

import pygame
import pygame.font

pygame.init()

win = pygame.display.set_mode((500, 200))
clock = pygame.time.Clock()
fps = 60

def input_player_name():
    # create font and text surface
    font = pygame.font.SysFont(None, 100)
    name_surf = font.render('', True, (255, 0, 0))
    player_name_screen = True
    name = ""
    while player_name_screen:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    player_name_screen = False
                else:
                    name += event.unicode
                    # recreate text surface   
                    name_surf = font.render(name, True, (255, 0, 0))              

        win.blit(player_name_bg, (0, 0))
        # blit text to window
        win.blit(name_surf, (50, 50))
        pygame.display.update()
        clock.tick(fps)

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