pygame.transform.scale() 不会缩放输入 Surface 本身。它创建一个新表面并对新表面进行缩放“blit”。新的表面由返回值返回:
pygame.transform.scale() 会:
- 创建大小为
(width, height) 的新表面 (newSurface)。
- 缩放并将
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 参数是否可以改进您的特定用例。