我将此作为中心正常文本
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]))
答案 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()