如何获得相同比例的缩放输出
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: 很难解释所以我不得不显示图像
使用以下算法:
- 获取图像的边界矩形,并将矩形的中心设置为目标矩形的中心。
- 使用
pygame.Rect.fit()
调整长宽比矩形并将其移动到目标矩形中。
- 使用新矩形的大小缩放图像。
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()
我正在尝试使用 pygame 制作游戏,但我想出了一个问题,人们对他们正在使用的分辨率感到恼火,并且无法调整大小 window拉伸它。
这是我正在努力实现的示例图片。
这是我试过的。
window.blit(pg.transform.scale(screen, (window.get_size())), (0, 0)) # The game screen stretching
PS: 很难解释所以我不得不显示图像
使用以下算法:
- 获取图像的边界矩形,并将矩形的中心设置为目标矩形的中心。
- 使用
pygame.Rect.fit()
调整长宽比矩形并将其移动到目标矩形中。 - 使用新矩形的大小缩放图像。
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()