Таким образом, вы копируете строки текста друг на друга, они всегда рисуются по координатам (400
, 400
).
self.surface.blit(scoresText, (400, 400))
Так обычно при написанииМногострочный текст в PyGame, код должен отображать каждую строку в растровом изображении, определять высоту, а затем использовать ее для размещения текста вниз по экрану.Рассмотрим функцию:
def getFontHeight( test_font ):
text_height = 0
test_bitmap = test_font.render( "WQ|^yg!`_", True, (0,0,0) )
text_height = test_bitmap.get_height()
return text_height
. Используется фрагмент текста, который содержит по возрастанию и по убыванию , чтобы получить грубое представление о том, каквысокая любая часть отображаемого текста должна бытьЭто важно, поскольку высота растрового изображения ___
отличается от XXX
, а использование высоты строки каждого растрового изображения приведет к неравномерному результату.
Когда в коде есть представление о том, сколько вертикального пространства выделено для каждой строки, довольно просто расположить строки текста на экране:
names_font = pg.font.SysFont( 'comicsansms', 20 )
scores_font = pg.font.SysFont( 'comicsansms', 20 )
...
def renderLeaderboard( screen, leaderboard, position, name_font, scores_font, column2at=400, spacer=5 ):
names_font_height = getFontHeight( name_font )
scores_font_height = getFontHeight( scores_font )
line_height = max( names_font_height, scores_font_height )
name_column = position[0]
row = position[1]
score_column = name_column + column2at
for name, score in leaderboard:
name_text = name_font.render( name, True, NAME_COLOUR )
score_text= score_font.render( score, True, SCORE_COLOUR )
screen.blit( name_text, ( name_column, row ) )
screen.blit( score_text, ( score_column, row ) )
row += line_height + spacer
В основном код записываетимя и оценка в столбцах, затем увеличивает вертикальное смещение (вниз по экрану) на высоту шрифта плюс разделитель, рисуя каждую линию по очереди.