如何根据显示器分辨率在pygame中调整字体大小?

7

largeText = pygame.font.Font('digifaw.ttf', 450)

字体大小为450,适合在分辨率为1366x768的全屏显示中显示文本。如何更改字体大小,使其与其他显示分辨率兼容? 我查看了font的Pydocs文档,但没有找到与自动缩放相关的内容。

更新:下面是代码片段

def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def message_display(text):
    largeText = pygame.font.Font('digifaw.ttf',450)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf, TextRect)

    pygame.display.update()

    time.sleep(1)

1个回答

5

您需要手动调整字体大小。如果某个字体适用于高度为768的窗口,则需要按比例调整字体大小,比例为当前高度/768。例如:

h = screen.get_height();
largeText = pygame.font.Font('digifaw.ttf', int(450*h/768))

注意,您可以使用pygame.freetype模块:
import pygame.freetype

font = pygame.freetype.Font('digifaw.ttf')

使用方法 .render_to() 直接将字体渲染到一个表面上:

h = screen.get_height()
font.render_to(screen, (x, y), 'text', color, size=int(450*h/768))

如果你想要缩放由字体渲染的 pygame.Surface 的宽度和高度,那么你需要使用 pygame.transform.smoothscale()
gameDisplay = pygame.display.set_mode(size, pygame.RESIZABLE)
ref_w, ref_h = gameDisplay.get_size()

def text_objects(text, font):
    textSurface = font.render(text, True, black).convert_alpha()

    cur_w, cur_h = gameDisplay.get_size()
    txt_w, txt_h = textSurface.get_size()
    textSurface = pygame.transform.smoothscale(
        textSurface, (txt_w * cur_w // ref_w, txt_h * cur_h // ref_h))

    return textSurface, textSurface.get_rect()  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接