我正在设置这个列表,其中加载了图像(图像是精灵(。我试图创建这个循环,它将重新缩放此列表中的所有图像。
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))
我期待调整图像大小,但相反,它只是保持不变,我不确定该怎么做。
我不确定 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]
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]
pygame.transform.smoothscale 返回一个新对象,因此您需要将其返回为一个值:
for x in range(len(walkLeft)):
walkLeft[x] = pygame.transform.smoothscale(x,(372, 493))