Сначала сохраните оригинальный размер поверхности:
original_size = (1200,700)
screen = pygame.display.set_mode(original_size, HWSURFACE|DOUBLEBUF|RESIZABLE)
Тогда у вас есть 2 варианта.
Вариант 1:
Используйте pygame.font
и визуализируйте текст на поверхности:
myFont = pygame.font.SysFont("monospace", 300)
label = myFont.render("Check 1", 40, (red))
Масштабировать текстовую поверхность по соотношению размера нового окна и исходного размера окна и blit
к поверхности:
pygame.event.pump()
event = pygame.event.wait()
if event.type == QUIT:
pygame.display.quit()
elif event.type == VIDEORESIZE:
screen = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE)
new_size = event.dict['size']
screen.blit(pygame.transform.scale(back_end_image_set, new_size), (0,0))
label_w = label.get_width() * new_size[0] // original_size[0]
label_h = label.get_height() * new_size[1] // original_size[1]
screen.blit(pygame.transform.scale(label, (label_w, label_h)), (0,0))
pygame.display.flip()
Вариант 2:
Использование pygame.freetype
:
import pygame.freetype
myFont = pygame.freetype.SysFont('monospace', 30)
Рассчитайте масштабированный размер текстовой области и отобразите его прямо на экране с измененным размером. Обратите внимание, что текст масштабируется по соотношению ширины нового окна и ширины исходного окна.
Эта реализация сохраняет соотношение ширины и высоты текста и не растягивает и не сжимает текст:
pygame.event.pump()
event = pygame.event.wait()
if event.type == QUIT:
pygame.display.quit()
elif event.type == VIDEORESIZE:
screen = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE)
new_size = event.dict['size']
screen.blit(pygame.transform.scale(back_end_image_set, new_size), (0,0))
myFont.render_to(screen, (0, 0), "Check 1", fgcolor=red, size = 300 * new_size[0] // original_size[0])
pygame.display.flip()