Это не Surface.blit
, который не поддерживает несколько строк. blit
просто нарисуйте Surface
на другом Surface
, все равно, что содержит Surface
.
Это pygame.Font.render , который не поддерживает мультилинии. Документы ясно говорят:
Текст может быть только одной строкой: символы новой строки не отображаются.
Так что я не знаю, что такое DisplayRoom.prompt
в вашем коде, но если это не строка, обязательно произойдет сбой: render
поднимает TypeError: text must be a unicode or bytes
.
И если это строка с символами новой строки, символы новой строки просто не отображаются.
Вы должны разбить текст и отобразить каждую строку отдельно.
В следующем примере я создаю простую функцию blitlines
, которая иллюстрирует, как вы можете это сделать.
import sys
import pygame
def blitlines(surf, text, renderer, color, x, y):
h = renderer.get_height()
lines = text.split('\n')
for i, ll in enumerate(lines):
txt_surface = renderer.render(ll, True, color)
surf.blit(txt_surface, (x, y+(i*h)))
background_colour = (0, 0, 0)
textcolor = (255, 255, 255)
multitext = "Hello World!\nGoodbye World!\nI'm back World!"
pygame.init()
screen = pygame.display.set_mode((500, 500))
userfont = pygame.font.Font(None, 40)
screen.fill(background_colour)
blitlines(screen, multitext, userfont, textcolor, 100, 100)
pygame.display.flip()
#main loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
Это результат на экране.
![sample image](https://i.stack.imgur.com/JvBt6m.png)