如何解决Pygame Python 字体
昨天我有一个关于字体的字形和字体的 pygame 宽度的问题,我有一些关于此的代码,这里是代码:
import pygame
pygame.init()
win = pygame.display.set_mode((800,600))
font = pygame.font.Font("freesansbold.ttf",32)
i = 0
text = "hello how are you?"
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
letter = text[i]
text_1 = font.render(letter,True,(255,255,255))
bw,bh = font.size(letter)
glyph_rect = pygame.mask.from_surface(text_1).get_bounding_rects()
# print(glyph_rect)
if glyph_rect:
gh = glyph_rect[0].height
print(f"{glyph_rect[0]}")
print(f'letter {letter} bitmap height: {bh} glyph height: {gh} width = {glyph_rect[0].width} width_2 = {bw}')
win.fill((0,0))
win.blit(text_1,(0,0))
pygame.display.update()
i += 1
run = i < len(text)
pygame.quit()
# win.blit(text_1,0))
我知道为什么字形高度不同,因为我在一个问题中提出了这个问题,我得到了答案,但为什么字形宽度总是比实际宽度小一点?谁能详细解释一下
解决方法
宽度不同是因为字符与单词连接时,字符之间有一个空格。
glyph_rect[0].width
是字形的宽度。 bw
是位图的宽度。字形没有填满整个位图,两边都有一些空间。
您可以使用以下程序对此进行调查(每个字母显示 1 秒):
import pygame
pygame.init()
win = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()
font = pygame.font.Font("freesansbold.ttf",200)
i = 0
text = "hello how are you?"
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
letter = text[i]
text_1 = font.render(letter,True,(0,0))
text_draw = font.render(letter,0),(255,255,255))
bw,bh = font.size(letter)
glyph_rect = pygame.mask.from_surface(text_1).get_bounding_rects()
if glyph_rect:
gh = glyph_rect[0].height
print(f"{glyph_rect[0]}")
print(f'letter {letter} bitmap height: {bh} glyph height: {gh} width = {glyph_rect[0].width} width_2 = {bw}')
win.fill((128,128,128))
win.blit(text_draw,(100,100))
for r in glyph_rect:
draw_rect = r.move(100,100)
pygame.draw.rect(win,draw_rect,3)
pygame.display.update()
i += 1
run = i < len(text)
clock.tick(1)
pygame.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。