Pygame Python 字体
Pygame Python font
昨天我有一个关于字形字体和 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, 0))
win.blit(text_1, (0, 0))
pygame.display.update()
i += 1
run = i < len(text)
pygame.quit()
# win.blit(text_1, (0, 0))
我知道为什么字形高度不同,因为我在一个问题中问过这个问题并且得到了答案,但为什么字形宽度总是比实际宽度小一点?有人可以详细解释一下吗
字宽不同是因为字与字连字时有一个space。
glyph_rect[0].width
是字形的宽度。 bw
是位图的宽度。字形没有填满整个位图,两边都有一些 space。
您可以使用以下程序对此进行调查(每个字母显示 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, 0))
text_draw = font.render(letter, True, (0, 0, 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, (255, 0, 0), draw_rect, 3)
pygame.display.update()
i += 1
run = i < len(text)
clock.tick(1)
pygame.quit()
昨天我有一个关于字形字体和 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, 0))
win.blit(text_1, (0, 0))
pygame.display.update()
i += 1
run = i < len(text)
pygame.quit()
# win.blit(text_1, (0, 0))
我知道为什么字形高度不同,因为我在一个问题中问过这个问题并且得到了答案,但为什么字形宽度总是比实际宽度小一点?有人可以详细解释一下吗
字宽不同是因为字与字连字时有一个space。
glyph_rect[0].width
是字形的宽度。 bw
是位图的宽度。字形没有填满整个位图,两边都有一些 space。
您可以使用以下程序对此进行调查(每个字母显示 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, 0))
text_draw = font.render(letter, True, (0, 0, 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, (255, 0, 0), draw_rect, 3)
pygame.display.update()
i += 1
run = i < len(text)
clock.tick(1)
pygame.quit()