如何在列表中调整多个图像的大小?

问题描述 投票:0回答:3

我正在设置这个列表,其中有图像(图像是精灵)加载。我试图创建这个循环,它将重新缩放此列表中的所有图像。

walkLeft = [pygame.image.load('Moving1.png'), pygame.image.load('Moving2.png'), pygame.image.load('Moving3.png'), pygame.image.load('Moving4.png'), pygame.image.load('Moving5.png'), pygame.image.load('Moving6.png'), pygame.image.load('Moving7.png'), pygame.image.load('Moving8.png'), pygame.image.load('Moving9.png')]
walkRight = []
for i in walkLeft:
    walkRight.append(pygame.transform.flip(i, True, False))

for x in walkLeft:
    pygame.transform.smoothscale(x,(372, 493))

我期待图像大小调整大小,但相反,它只是保持不变,我不知道该怎么做。

python python-3.x pygame
3个回答
2
投票

我不确定pygame本身,因为我从来没有使用它,但我认为问题是pygame.transform.smoothscale()不是变形 - 它不会改变你正在喂它的x,而是输出一个改变的版本没有修改原件。您可以在pygame.transform.flip(i, True, False))中看到类似的行为 - 每次迭代,它都会生成i的修改后的副本,您可以将其附加到walkRight,但它不会更改您开始使用的i

你可能想要这样做的方法是通过索引而不是按元素迭代,并实际替换元素:

for i in range(len(walkLeft)):
    walkLeft[i] = pygame.transform.smoothscale(x, (372, 493))

您也可以跳过一个步骤,只需使用列表推导重新创建整个列表,这将使您的脚本更具惯用性:

walkLeft = [pygame.image.load('Moving1.png'), ...]
walkRight = [pygame.transform.flip(x, True, False) for x in walkLeft]
walkLeft = [pygame.transform.smoothscale(x, (372, 493)) for x in walkLeft]

1
投票

pygame.transform.smoothscale()无法处理列表。 该方法缩放由参数传递的图像,并通过返回值返回新的缩放图像。返回值必须重新分配给列表。

你必须循环:

或者:

for i in range(len(walkLeft)):
    walkLeft[i] = pygame.transform.smoothscale(walkLeft[i], (372, 493))

或者在一行中:

walkLeft = [pygame.transform.smoothscale(x, (372, 493)) for x in walkLeft]

0
投票

pygame.transform.smoothscale返回一个新对象,因此您需要将其返回值:

for x in range(len(walkLeft)):
    walkLeft[x] = pygame.transform.smoothscale(x,(372, 493))
© www.soinside.com 2019 - 2024. All rights reserved.