pygame.transform.scale方法的文档如下。
scale(Surface, (width, height), DestSurface = None) -> Surface`
将Surface调整为新的分辨率。这是一种快速缩放操作,不会对结果进行采样。
可以使用可选的目标表面,而不用创建新的目标表面。如果要重复缩放某些内容,这会更快。但是,目的地的大小必须与传入的(宽度,高度)大小相同。另外,目的地表面的格式也必须相同。”
我试图弄清楚什么是目的地表面。我假设它与以下事实有关:每当我重新缩放表面时都会创建一个新的表面对象,以及如何使用
DestSurface
避免出现这种情况? 最佳答案
pygame.transform.scale()
不会缩放输入Surface本身。它创建一个新曲面,并对新曲面进行缩放处理。新表面由返回值返回:pygame.transform.scale()
可以:
创建尺寸为newSurface
的新曲面((width, height)
)。
缩放并将Surface
复制到newSurface
。
返回newSurface
。
目标曲面是将缩放的曲面复制到的pygame.Surface
。这样更快,因为不必分配Surface的内存。
设置DestSurface
后,pygame.transform.scale()
会执行以下操作:
缩放并复制Surface
到DestSurface
。
返回DestSurface
。
因此,DestSurface
的大小必须为(width, height)
,DestSurface
的格式与Surface
的格式相同。
一个可能的用例是,如果您必须在主应用程序循环中将某些东西连续缩放到固定大小(例如,如果表面是动态生成的)。在以下情况中,surf
被假定为表面对象:
while True:
# [...]
scaledSurf = pygame.transform.scale(surf, (100, 100))
window.blit(scaledSurf, (x, y)
可以使用
DestSurface
参数来改进代码:scaledSurf = pygame.Surface((100, 100))
while True:
# [...]
pygame.transform.scale(surf, (100, 100), scaledSurf)
window.blit(scaledSurf, (x, y)
那可能是一种罕见的情况。通常,您应该尝试在初始化时缩放表面,而不是在应用程序循环中连续缩放,并在循环中使用缩放后的表面。
不要尝试强制使用该参数,也不要“构造”
DestSurface
参数的用例。反之亦然。编写您的应用程序并使其运行。然后调查DestSurface
参数是否可以改进您的特定用例。关于python - Pygame.transform.scale中的DestSurface参数是什么意思,该如何使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60045882/