2024-05-06 13:47:29 发布
网友
所以我用python和pygame制作了一个游戏,我有这样的indow设置
display = pygame.display.set_mode((0,0), pygame.FULLSCREEN)
这使得窗口的大小约为1334 X 800,因此我基于该大小的屏幕上的所有精灵和背景,但正如你所知,并不是每个人都有与我一样大小的屏幕,所以我的问题是,如何使图像与显示器屏幕的大小成比例
(注:游戏处于全屏模式)
从this SO question,可以使用
infoObject = pygame.display.Info()
它获取屏幕的高度和宽度为infoObject.current_w和{}
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参数。您可以使用此选项直接从屏幕外表面变换到显示器表面。)
transform
DestSurface
但假设你想按你要求的方式去做。在
你可以这样做时,加载精灵。例如:
背景也是一样。在
从this SO question,可以使用
它获取屏幕的高度和宽度为}
infoObject.current_w
和{然后可以使用这些值适当地缩放所有内容。在
首先,如何得到分辨率和比例因子?在
这很棘手,因为某人的屏幕可能与1334x800的纵横比不同。你可以用信箱(以各种不同的方式)或伸展精灵;你需要决定你想要什么,但我将展示一种信箱的可能性:
现在,如何缩放每个精灵和背景?在
好吧,首先,你确定你想吗?只是变换整个曲面可能更简单。如果不进行测试,很难预测这是慢还是快(而且可能与此无关),但它肯定会看起来更好(因为任何插值、抖动、抗锯齿等都是在合成之后发生的,而不是之前,除非您要使用8位外观,当然,在这种情况下,它会破坏外观…)。您可以通过将所有内容合成为1334x800的离屏表面(或者,更好的是,将所有内容放大一个常数因子),然后对该表面进行^{} 显示。(请注意,
transform
方法包括可选的DestSurface
参数。您可以使用此选项直接从屏幕外表面变换到显示器表面。)但假设你想按你要求的方式去做。在
你可以这样做时,加载精灵。例如:
^{pr2}$背景也是一样。在
相关问题 更多 >
编程相关推荐