Pygame,按字符逐个文本,并使其居中

时间:2017-05-13 18:02:52

标签: python pygame

我将此作为中心正常文本

text = textfont.render(text, True, WHITE)
tpos = ((winwidth/2) - text.get_rect().width, (winheight/2) - text.get_rect().height)

但是,如果我想逐字逐句地进行blit,并将其置于中心位置,那么我的数学技能会让我失望,而且我不知道如何。我尝试过以下方法:

    for x in range(len(title)):             #if blit letter by letter
        twid = (winwidth - (2*tpos[0])) / len(title)
        win.blit(textfont.render(title[x], False, WHITE), (tpos[0] + (((x+1) * 20) + twid), tpos[1]))

2 个答案:

答案 0 :(得分:0)

首先,您需要在绘制之前测量/计算文本的最终宽度,然后您可以将其居中。我建议在图像上绘制文字并将生成的图像居中。

答案 1 :(得分:0)

我使用screen.get_rect()获取屏幕大小的矩形。如果文本被更改,请重新渲染文本表面并从中获取新的矩形。将新rect的中心设置为screen_rect的中心,然后只在text_rect中blit text_surface。 (键入内容以使文本字符串更长。)

import sys
import pygame as pg


def main():
    clock = pg.time.Clock()
    screen = pg.display.set_mode((640, 480))
    screen_rect = screen.get_rect()
    font = pg.font.Font(None, 46)
    color = pg.Color('sienna1')

    text = 'text'
    text_surface = font.render(text, True, color)
    text_rect = text_surface.get_rect(center=screen_rect.center)

    done = False

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
            if event.type == pg.KEYDOWN:
                text += event.unicode
                text_surface = font.render(text, True, color)
                text_rect = text_surface.get_rect(center=screen_rect.center)

        screen.fill((40, 40, 40))
        screen.blit(text_surface, text_rect)

        pg.display.flip()
        clock.tick(30)


if __name__ == '__main__':
    pg.init()
    main()
    pg.quit()
    sys.exit()