Как отобразить текстовый файл на экране pygame?

Мне было интересно, можно ли отображать текст из текстового файла на экране pygame. Я работаю над игрой и пытаюсь отобразить инструкции из текстового файла в своей игре.

Вот что я сделал ниже:

def instructions():
    instructText = instructionsFont.render(gameInstructions.txt, True, WHITE)
    screen.blit(instructText, ((400 - (instructText.get_width()/2)),(300 - (instructText.get_height()/2))))

Однако я получаю сообщение об ошибке:

line 356, in instructions
    instructText = instructionsFont.render(pongInstructions.txt, True, WHITE)
NameError: name 'pongInstructions' is not defined

Моя попытка, однако, все методом проб и ошибок, потому что я на самом деле не знаю, как это сделать... Любая помощь очень ценится!


person Student    schedule 29.05.2017    source источник


Ответы (1)


gameinstructions не определено, так как python считает, что это переменная.

Чтобы сообщить python, что это строка, вам нужно поместить ее в кавычки:

instructText = instructionsFont.render("gameInstructions.txt", True, WHITE)

Однако это, вероятно, не то, что вы хотите. То, что вы хотите сделать, это прочитать файл. Для этого вы должны использовать оператор with для безопасного открытия и закрытия файла:

with open("gameInstructions.txt") as f:
    instructText = instructionsFont.render(f.read(), True, WHITE)

В настоящее время я не могу попробовать код, но вместо этого вам может понадобиться перебирать строки, если pygame не может обрабатывать несколько строк текста одновременно:

with open("gameInstructions.txt") as f:
    for line in f:
        instructText = instructionsFont.render(line, True, WHITE)
person Azsgy    schedule 29.05.2017
comment
Я пробовал этот код, однако получаю сообщение об ошибке: строка 26, при декодировании возвращают codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: кодек ascii не может декодировать байт 0xe2 в позиции 397: порядковый номер не диапазон(128) - person Student; 30.05.2017
comment
какая у тебя версия питона? Кажется, ожидается ascii, частью которого не является символ â. Из других сообщений я вижу, что он должен поддерживать юникод .com/questions/668359/ - person Azsgy; 30.05.2017
comment
Я запускаю это в python 3.6.0 - person Student; 30.05.2017
comment
Это часто вызвано неправильным языковым стандартом. Попробуйте принудительно закодировать файл с помощью open(filename, encoding='utf-8') или проверьте, правильно ли установлена ​​ваша локаль. - person Azsgy; 30.05.2017
comment
другой связанный вопрос: stackoverflow.com/questions/21129020/ - person Azsgy; 30.05.2017
comment
Спасибо за помощь, однако после принудительного кодирования ничего не происходит. Моя программа зависает. На данный момент мой код def instructions(): screen.fill(TEAL) with open("pongInstructions.txt", encoding = 'utf-8') as f: for line in f: instructText = instructionsFont.render(line, True, WHITE) screen.blit(instructText, ((400 - (instructText.get_width()/2)),(300 - (instructText.get_height()/2)))) pygame.display.update() Любые другие предложения? - person Student; 30.05.2017
comment
Я не знаю, я не очень хорошо знаком с pygame. Поскольку вы решили исходную проблему (инструкции не определены), я рекомендую вам двигаться дальше и начать новый вопрос. - person Azsgy; 30.05.2017
comment
Хорошо, большое спасибо за вашу помощь и время! - person Student; 30.05.2017