0
votes

Comment redimensionnerais-je plusieurs images dans une liste?

Je configurais cette liste où il avait des images (images sont des sprites) chargées dans. J'essayais de créer cette boucle où elle réduisait toutes les images de cette liste.

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))


3 Réponses :


2
votes

Je ne suis pas sûr de Pygame lui-même, comme je ne l'ai jamais utilisé, mais je pense que le problème est que pygame.transform.smoothscale () n'est pas transformateur - il ne change pas le x que vous le nourrissez, mais génère plutôt une version modifiée sans modifier l'original. Vous pouvez voir un comportement similaire dans pygame.transform.flip (i, true, false)) - chaque itération, elle produit une copie modifiée de i , que vous apportez à < Code> Walkright , mais cela ne change pas le i que vous avez commencé avec.

La façon dont vous voudrez probablement y aller à ce sujet est en itérant par index < / em> au lieu de par élément et remplacez effectivement des éléments à mesure que vous allez: xxx

Vous pouvez également ignorer une étape et simplement recréer toute la liste Utilisation des compréhensions de la liste, qui rendrait votre script plus idiomatique dans l'ensemble: xxx


0 commentaires

0
votes

pygame.transform.smoothscale retourne un Nouveau objet, vous devez donc le retourner à une valeur:

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


1 commentaires

Dans votre solution x est un entier - .smoothscale () ne prend pas un entier pour son premier argument. Si vous avez besoin d'un élément et de son index, vous pouvez utiliser énumérer .



1
votes

pygame.transform.smoothscale () < / code> ne peut pas traiter les listes.
La méthode échoue à une image qui est transmise par le paramètre et renvoie une nouvelle image mise à l'échelle par la valeur de retour. La valeur de retour on peut être réaffectée à la liste.

Vous devez le faire dans une boucle:

soit: xxx

ou en une ligne : xxx


0 commentaires