如何使窗口上的所有图像都按moni的大小缩小或放大

2024-05-06 13:47:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我用python和pygame制作了一个游戏,我有这样的indow设置

display = pygame.display.set_mode((0,0), pygame.FULLSCREEN)

这使得窗口的大小约为1334 X 800,因此我基于该大小的屏幕上的所有精灵和背景,但正如你所知,并不是每个人都有与我一样大小的屏幕,所以我的问题是,如何使图像与显示器屏幕的大小成比例

(注:游戏处于全屏模式)


Tags: 图像游戏屏幕modedisplay模式显示器pygame
2条回答

this SO question,可以使用

infoObject = pygame.display.Info()

它获取屏幕的高度和宽度为infoObject.current_w和{}

然后可以使用这些值适当地缩放所有内容。在

首先,如何得到分辨率和比例因子?在

这很棘手,因为某人的屏幕可能与1334x800的纵横比不同。你可以用信箱(以各种不同的方式)或伸展精灵;你需要决定你想要什么,但我将展示一种信箱的可能性:

NOMINAL_WIDTH, NOMINAL_HEIGHT = 1334., 800.
surface = display.get_surface()
width, height = surface.get_width(), surface.get_height()
xscale = width / NOMINAL_WIDTH
yscale = height / NOMINAL_HEIGHT
if xscale < 1 and yscale < 1:
    scale = max(xscale, yscale)
elif xscale > 1 and yscale > 1:
    scale = min(xscale, yscale)
else:
    scale = 1.0

现在,如何缩放每个精灵和背景?在

好吧,首先,你确定你想吗?只是变换整个曲面可能更简单。如果不进行测试,很难预测这是慢还是快(而且可能与此无关),但它肯定会看起来更好(因为任何插值、抖动、抗锯齿等都是在合成之后发生的,而不是之前,除非您要使用8位外观,当然,在这种情况下,它会破坏外观…)。您可以通过将所有内容合成为1334x800的离屏表面(或者,更好的是,将所有内容放大一个常数因子),然后对该表面进行^{}显示。(请注意,transform方法包括可选的DestSurface参数。您可以使用此选项直接从屏幕外表面变换到显示器表面。)


但假设你想按你要求的方式去做。在

你可以这样做时,加载精灵。例如:

^{pr2}$

背景也是一样。在

相关问题 更多 >