如何获得相同比例的缩放输出

How to get the scaled output with the same ratio

我正在尝试使用 pygame 制作游戏,但我想出了一个问题,人们对他们正在使用的分辨率感到恼火,并且无法调整大小 window拉伸它。

这是我正在努力实现的示例图片。

这是我试过的。

window.blit(pg.transform.scale(screen, (window.get_size())), (0, 0)) # The game screen stretching

PS: 很难解释所以我不得不显示图像

使用以下算法:

  1. 获取图像的边界矩形,并将矩形的中心设置为目标矩形的中心。
  2. 使用 pygame.Rect.fit() 调整长宽比矩形并将其移动到目标矩形中。
  3. 使用新矩形的大小缩放图像。
  4. blit矩形位置的图像。
def blit_fit(dest_surf, image, dest_rect):
    image_rect = image.get_rect(center = dest_rect.center)
    fit_rect = image_rect.fit(dest_rect)
    scaled_image = pygame.transform.scale(image, fit_rect.size) 
    dest_surf.blit(scaled_image, fit_rect)

最小示例:

import pygame

pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()

font = pygame.font.SysFont(None, 100)
image = font.render("Screen", True, (255, 255, 0))
pygame.draw.rect(image, (255, 255, 255), image.get_rect(), 1)

def blit_fit(dest_surf, image, dest_rect):
    image_rect = image.get_rect(center = dest_rect.center)
    fit_rect = image_rect.fit(dest_rect)
    scaled_image = pygame.transform.scale(image, fit_rect.size) 
    dest_surf.blit(scaled_image, fit_rect) 

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 

    window.fill(0)
    blit_fit(window, image, window.get_rect())    
    pygame.display.flip()
    clock.tick(100)

pygame.quit()
exit()